Linux 上的 SQL Server 用户权限管理
一 核心概念与准备
二 常用管理任务与 T‑SQL 示例
创建登录名与数据库用户
-- 服务器级:创建登录名
CREATE LOGIN alice WITH PASSWORD = '<StrongPassword>';
-- 切换到目标数据库并创建相应用户(与登录名同名映射)
USE SalesDB;
CREATE USER alice FOR LOGIN alice;
授予固定数据库角色
USE SalesDB;
-- 只读
EXEC sp_addrolemember 'db_datareader', 'alice';
-- 读写(不含结构变更)
EXEC sp_addrolemember 'db_datawriter', 'alice';
-- 谨慎授予:库级完全控制
-- EXEC sp_addrolemember 'db_owner', 'alice';
授予对象级精细权限
USE SalesDB;
GRANT SELECT, INSERT, UPDATE, DELETE
ON OBJECT::dbo.Orders TO alice;
-- 如需更细粒度,可只授予到列
-- GRANT SELECT ON OBJECT::dbo.Orders(OrderID, CustomerID) TO alice;
创建自定义数据库角色并授权
USE SalesDB;
CREATE ROLE SalesReadOnly;
GRANT SELECT ON SCHEMA::dbo TO SalesReadOnly;
ALTER ROLE SalesReadOnly ADD MEMBER alice;
撤销与拒绝(按需使用)
-- 撤销某权限
REVOKE SELECT ON OBJECT::dbo.Orders FROM alice;
-- 显式拒绝(优先级高于 GRANT)
DENY DELETE ON OBJECT::dbo.Orders TO alice;
查看与验证
-- 查看数据库主体与权限
USE SalesDB;
SELECT * FROM sys.database_principals WHERE name = 'alice';
SELECT * FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('alice');
以上流程同样适用于 Ubuntu/Debian 等 Linux 发行版,仅工具安装命令有所差异。
三 进阶访问控制
行级安全性(RLS):按行限制可见数据,常用于“客户只能看自己的数据、员工只看本部门数据”。示例要点:创建内联表值函数作为谓词,再创建安全策略绑定到表,并可选择启用/禁用策略。
动态数据掩码(DDM):对敏感列做部分掩蔽(如邮箱保留域名),对应用透明,常用于脱敏展示。
实践建议:优先采用“最小权限原则”,先授予固定或自定义角色,再按对象/列细化;对复杂业务可按部门或场景建立自定义角色,便于批量授权与审计。
四 常用连接与排错命令
sudo apt-get update
sudo apt-get install -y mssql-tools unixodbc-dev
sqlcmd -S localhost -U SA -P '<YourPassword>'