- 首页 >
- 问答 >
-
云计算 >
- Debian系统下SQL Server的权限管理
Debian系统下SQL Server的权限管理
小樊
48
2025-11-15 00:44:22
Debian下SQL Server权限管理实战
一 环境准备与连接
- 安装与配置
- 更新系统并添加微软APT源(以Debian 12为例),安装并初始化 SQL Server:
- sudo apt update && sudo apt install -y curl gnupg apt-transport-https
- curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg
- echo “deb [signed-by=/usrusr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/debian/12/prod/ stable main” | sudo tee /etc/apt/sources.list.d/mssql-server.list > /devref
- sudo apt install -y mssql-server
- sudo /opt/mssql/bin/mssql-conf setup
- 安装命令行工具并连接
- sudo apt install -y mssql-tools unixodbc-dev
- 连接命令:sqlcmd -S localhost -U SA -P ‘YourStrongPassword’
- 如需远程连接,请开放防火墙端口1433/TCP并配置 /etc/mssql/mssql.conf 中的 listen 地址。
二 核心概念与最小权限原则
- 概念区分
- 登录名(Login):实例级身份,用于连接到 SQL Server 实例。
- 数据库用户(User):数据库级主体,必须映射到登录名,用于访问具体数据库对象。
- 角色(Role):权限的集合,分为固定数据库角色(如 db_datareader、db_datawriter、db_owner)与自定义角色,便于批量授权与回收。
- 最小权限原则
- 日常业务优先授予最小必要权限(如只读用 db_datareader,写入用 db_datawriter,特定表/列用细粒度 GRANT),仅在必要时使用高权限(如 db_owner)。
三 常用T-SQL操作速查
- 登录名管理
- 创建:CREATE LOGIN login_name WITH PASSWORD = ‘password’;
- 修改密码:ALTER LOGIN login_name WITH PASSWORD = ‘new_password’;
- 删除:DROP LOGIN login_name;
- 数据库用户与映射
- 在目标库创建用户并映射登录名:USE db; CREATE USER user_name FOR LOGIN login_name;
- 删除用户:DROP USER user_name;
- 角色管理(新方式优先)
- 将用户加入角色:ALTER ROLE db_datareader ADD MEMBER user_name;
- 移除角色:ALTER ROLE db_datareader DROP MEMBER user_name;
- 细粒度权限
- 授予:GRANT SELECT, INSERT, UPDATE, DELETE ON OBJECT::schema.table TO user_name;
- 撤销:REVOKE SELECT, INSERT, UPDATE, DELETE ON OBJECT::schema.table FROM user_name;
- 兼容旧写法(不推荐新脚本使用)
- EXEC sp_addrolemember ‘db_datareader’, ‘user_name’;
- EXEC sp_droprolemember ‘db_datareader’, ‘user_name’;
- 验证与审计
- 查看某用户的数据库权限:USE db; SELECT * FROM sys.database_permissions WHERE grantee_principal_id = USER_ID(‘user_name’);
- 审计与监控:启用 SQL Server Audit 与 Extended Events 跟踪登录与关键数据访问。
四 典型场景与命令示例
- 只读用户
- USE MyDB; CREATE USER app_read FOR LOGIN app_read;
- ALTER ROLE db_datareader ADD MEMBER app_read;
- 读写用户(库级)
- USE MyDB; CREATE USER app_rw FOR LOGIN app_rw;
- ALTER ROLE db_datareader ADD MEMBER app_rw;
- ALTER ROLE db_datawriter ADD MEMBER app_rw;
- 表级写入权限
- USE MyDB; GRANT INSERT, UPDATE, DELETE ON dbo.Orders TO app_rw;
- 分权只读(按模式)
- USE MyDB; CREATE ROLE r_schema_read;
- GRANT SELECT ON SCHEMA::sales TO r_schema_read;
- ALTER ROLE r_schema_read ADD MEMBER analyst;
- 临时提升为库所有者(维护窗口)
- USE MyDB; ALTER ROLE db_owner ADD MEMBER dba_temp;
- – 维护完成回收
- ALTER ROLE db_owner DROP MEMBER dba_temp;
五 安全与运维建议
- 强口令与禁用 SA:为 SA 设置强口令,生产环境建议禁用或限制其远程登录,仅保留应急使用。
- 最小权限与职责分离:应用账号仅授予所需权限;开发、测试、运维账号分离;避免多人共用账号。
- 审计与告警:启用登录成功/失败审计,结合 Extended Events 监控敏感表访问与权限变更。
- 定期巡检:周期性核查高权限主体、异常权限授予与失效账号,及时回收。