SQL Server 在 Debian 上的权限管理技巧
一 基础准备与连接
二 最小权限模型与角色设计
-- 实例级登录
CREATE LOGIN app_reader WITH PASSWORD = 'Str0ngP@ss!';
GO
-- 在目标库创建用户并映射
USE SalesDB;
GO
CREATE USER app_reader FOR LOGIN app_reader;
GO
-- 授予只读
EXEC sp_addrolemember 'db_datareader', 'app_reader';
GO
USE SalesDB;
GO
CREATE ROLE rpt_reader;
GO
GRANT SELECT ON SCHEMA::dbo TO rpt_reader;
GO
ALTER ROLE rpt_reader ADD MEMBER app_reader;
GO
三 常见权限场景与 T-SQL 模板
USE SalesDB;
GO
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Orders TO app_writer;
GO
GRANT SELECT ON dbo.Orders(OrderId, CustomerId, OrderDate) TO app_report;
GO
GRANT EXECUTE ON dbo.usp_SubmitOrder TO app_api;
GO
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO app_writer;
GO
REVOKE DELETE ON dbo.Orders FROM app_writer;
GO
-- 查看某用户在库上的显式权限
USE SalesDB;
GO
SELECT
USER_NAME(p.grantee_principal_id) AS grantee,
OBJECT_NAME(p.major_id) AS object,
p.permission_name,
p.state_desc
FROM sys.database_permissions p
WHERE USER_NAME(p.grantee_principal_id) = 'app_writer'
ORDER BY p.major_id, p.permission_name;
GO
四 审计与持续合规
-- 服务器级审计(示例路径,Linux 下需可写目录)
CREATE SERVER AUDIT LoginAudit
TO FILE (FILEPATH = '/var/opt/mssql/data/audit/')
WITH (ON_FAILURE = CONTINUE);
GO
ALTER SERVER AUDIT LoginAudit WITH (STATE = ON);
GO
-- 数据库级审计规范:审计登录事件
CREATE DATABASE AUDIT SPECIFICATION LoginAuditSpec
FOR SERVER AUDIT LoginAudit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP)
WITH (STATE = ON);
GO
五 运维安全清单