在Ubuntu上管理SQL Server用户权限前,需先完成SQL Server的安装与环境配置:
mssql-tools
(包含sqlcmd
,用于执行SQL命令):sudo apt-get update
sudo apt-get install -y mssql-server mssql-tools
sudo /opt/mssql/bin/mssql-conf setup
,按提示设置SA账户密码(系统管理员账户)及SQL Server版本(如2022)。sqlcmd
工具以SA身份登录:sqlcmd -S localhost -U SA -P 'YourStrongPassword'
以上步骤确保具备管理权限的基础环境。
登录名是用户访问SQL Server实例的身份凭证,分为SQL Server身份验证(用户名/密码)和Windows身份验证(集成Windows账户)。常用SQL Server身份验证:
USE master; -- 必须在master数据库中创建服务器登录名
CREATE LOGIN [your_login_name] WITH PASSWORD = 'ComplexPassword123!';
注意:密码需符合复杂度要求(大小写字母、数字、特殊字符,长度≥8),避免使用弱密码。
登录名需关联到具体数据库才能访问数据,需在目标数据库中创建用户并绑定登录名:
USE YourDatabase; -- 切换至目标数据库(如TestDB)
CREATE USER [your_user_name] FOR LOGIN [your_login_name];
此命令创建数据库用户your_user_name
,并与服务器登录名your_login_name
关联。
SQL Server提供预定义数据库角色,包含一组固定权限,可快速分配给用户:
分配角色的命令:
ALTER ROLE [db_datareader] ADD MEMBER [your_user_name]; -- 授予查询权限
ALTER ROLE [db_datawriter] ADD MEMBER [your_user_name]; -- 授予增删改权限
替代方案:若预定义角色不满足需求,可创建自定义角色并分配最小必要权限:
CREATE ROLE [custom_reader]; -- 创建自定义角色
GRANT SELECT ON SCHEMA::dbo TO [custom_reader]; -- 授予dbo架构下所有表的查询权限
ALTER ROLE [custom_reader] ADD MEMBER [your_user_name]; -- 将用户加入自定义角色
若需更细粒度的权限(如针对特定表或操作),可使用GRANT
(授予)、REVOKE
(撤销)命令:
-- 授予特定表的SELECT、INSERT权限
GRANT SELECT, INSERT ON dbo.YourTable TO [your_user_name];
-- 撤销特定表的DELETE权限
REVOKE DELETE ON dbo.YourTable FROM [your_user_name];
注意:权限遵循“继承原则”,用户权限=角色权限+直接授予的权限,需避免权限叠加导致的过度授权。
db_datareader
,避免给db_owner
)。SELECT * FROM sys.database_permissions WHERE grantee_principal_id = USER_ID('your_user_name');
SELECT * FROM sys.database_role_members WHERE member_principal_id = USER_ID('your_user_name');
sp_configure
启用密码策略(需重启SQL Server服务):EXEC sp_configure 'password policy', 1; -- 启用密码复杂度检查
EXEC sp_configure 'password expiration', 1; -- 启用密码过期(90天)
RECONFIGURE;
-- 启用TDE(需先创建主密钥和证书)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKeyPassword123!';
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'Server Certificate';
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
ALTER DATABASE YourDatabase SET ENCRYPTION ON;
EXEC sp_configure 'login auditing', 2; -- 记录成功和失败登录
RECONFIGURE;
以上实践可有效提升SQL Server在Ubuntu上的安全性,降低数据泄露风险。