在Ubuntu上管理SQL Server用户权限前,需先完成SQL Server的安装与基础配置:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/mssql-server-2022 main"
sudo apt-get update && sudo apt-get install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
,设置SA系统管理员密码(需记住此密码,后续登录需使用)及版本(如Standard/Enterprise)。sudo systemctl start mssql-server
启动SQL Server服务,sudo systemctl enable mssql-server
设置开机自启。使用sqlcmd(SQL Server命令行工具)登录实例(需提前安装:sudo apt-get install mssql-tools
):
sqlcmd -S localhost -U SA -P 'Your_SA_Password'
输入密码后进入SQL命令行界面(以1>
开头表示登录成功)。
登录名用于验证用户访问SQL Server实例的合法性,属于服务器级主体:
USE master; -- 切换到master数据库(系统数据库)
CREATE LOGIN [LoginName] WITH PASSWORD = 'StrongPassword123!';
LoginName
:自定义登录名(如dev_user
);PASSWORD
:需符合密码策略(可通过EXEC sp_configure 'password policy', 1; RECONFIGURE;
开启复杂度要求)。数据库用户是登录名在特定数据库中的映射,属于数据库级主体。需先切换到目标数据库:
USE YourDatabase; -- 切换到目标数据库(如`MyDB`)
CREATE USER [UserName] FOR LOGIN [LoginName]; -- 关联登录名与数据库用户
UserName
:数据库内的用户名(可与登录名一致,如dev_user
);SQL Server提供预定义数据库角色,可快速分配常用权限集合:
USE YourDatabase;
-- 分配固定数据库角色(示例)
ALTER ROLE db_datareader ADD MEMBER [UserName]; -- 授予SELECT权限(读取数据)
ALTER ROLE db_datawriter ADD MEMBER [UserName]; -- 授予INSERT/UPDATE/DELETE权限(写入数据)
-- 高级角色:授予更高级权限(如db_owner可管理数据库)
ALTER ROLE db_owner ADD MEMBER [UserName];
db_datareader
:读取所有用户表数据;db_datawriter
:插入、更新、删除所有用户表数据;db_owner
:管理数据库(慎用,相当于数据库管理员)。若预定义角色无法满足需求,可自定义权限(针对特定表/视图/存储过程):
USE YourDatabase;
-- 授予SELECT权限(读取指定表)
GRANT SELECT ON dbo.Customers TO [UserName];
-- 授予INSERT/UPDATE/DELETE权限(修改指定表)
GRANT INSERT, UPDATE, DELETE ON dbo.Orders TO [UserName];
-- 授予执行权限(调用存储过程)
GRANT EXECUTE ON dbo.usp_GetCustomerData TO [UserName];
-- 撤销权限(如撤销UPDATE权限)
REVOKE UPDATE ON dbo.Orders FROM [UserName];
dbo
:数据库所有者架构(默认架构);USE YourDatabase;
SELECT * FROM sys.database_principals WHERE name = 'UserName'; -- 查看用户基本信息
SELECT * FROM fn_my_permissions(NULL, 'DATABASE'); -- 查看当前用户权限
USE YourDatabase;
EXEC sp_helprolemember 'db_datareader'; -- 查看db_datareader角色成员
通过上述命令可确认权限分配是否正确。
db_datareader
)。sysadmin
等高权限角色的滥用(仅授予管理员)。通过以上步骤,可在Ubuntu环境下完成SQL Server用户权限的全生命周期管理,确保数据库安全与业务需求平衡。