温馨提示×

SQL Server在Debian上的权限管理技巧

小樊
44
2025-12-04 19:20:49
栏目: 云计算

SQL Server 在 Debian 上的权限管理技巧

一 基础准备与连接

  • 安装与配置:导入 Microsoft GPG 密钥,添加 APT 仓库,安装 mssql-server 后通过 /opt/mssql/bin/mssql-conf setup 完成初始化(设置 SA 密码等)。
  • 工具与连接:安装 mssql-tools,使用 sqlcmd -S localhost -U SA -P ‘ 连接本机实例;远程连接需开放防火墙并配置 mssql.conf 的监听地址。
  • 建议:仅在内网开放端口,禁用不必要的服务与端口,SA 仅用于紧急运维,日常使用专用低权账户。

二 最小权限模型与角色设计

  • 登录名与数据库用户分离:先在实例级创建 LOGIN,再在目标数据库创建映射的 USER,遵循“最小权限原则”。
  • 优先使用内置数据库角色:如只读用 db_datareader、读写用 db_datawriter,避免直接授予 db_owner
  • 自定义角色封装细粒度权限:将一组 GRANT 封装为自定义角色,便于复用与审计。
  • 示例(创建只读应用账户):
    -- 实例级登录
    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
    
  • 撤销与回收:使用 REVOKE 回收对象级权限,必要时 DROP USER / DROP LOGIN

三 常见权限场景与 T-SQL 模板

  • 表级 CRUD:
    USE SalesDB;
    GO
    GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Orders TO app_writer;
    GO
    
  • 仅对某几列授予 SELECT(列级权限):
    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
    
  • 提示:对频繁变更的对象,优先授予在 SCHEMA 上的权限,减少维护量。

四 审计与持续合规

  • 启用登录审计以记录成功/失败登录:
    -- 服务器级审计(示例路径,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
    
  • 建议:定期归档与轮转审计文件,结合监控告警;对敏感表或关键操作可扩展审计规范以覆盖 DML/DDL

五 运维安全清单

  • 账户与口令:禁用或限制 SA 使用;为应用与运维分别创建账户;强制使用强口令并定期轮换。
  • 连接与网络:仅开放必要端口(默认 1433/TCP);限制来源网段;启用 TLS 加密连接。
  • 权限分配:坚持最小权限;优先角色化授权;对生产变更使用工单与复核。
  • 版本与补丁:保持 SQL Server on LinuxDebian 的安全更新;变更前备份。
  • 监控与告警:对失败登录、权限变更、异常查询建立基线告警与审计追踪。

0