在 Debian 上管理 SQL Server 用户权限
一 环境准备与连接
- 安装 SQL Server 命令行工具(含 sqlcmd):sudo apt update && sudo apt install -y mssql-tools,并将工具目录加入 PATH(例如 /opt/mssql-tools/bin)。
- 使用 sqlcmd 连接本地实例:sqlcmd -S localhost -U SA -P ‘YourStrongPassword’。
- 如需远程管理,确保 Debian 防火墙放行 1433/TCP,并在 SQL Server 配置中启用远程连接。
二 核心概念与最小权限原则
- 区分层级:
- 实例级主体:登录名(LOGIN),用于连接到 SQL Server 实例。
- 数据库级主体:用户(USER),映射到登录名,在特定数据库内被授予权限。
- 角色与权限:
- 固定数据库角色:如 db_owner、db_datareader、db_datawriter,便于快速授权。
- 细粒度权限:使用 GRANT/REVOKE/DENY 在对象(库、表、视图、存储过程等)级别控制。
- 安全建议:遵循最小权限原则,避免使用 SA 进行日常操作,为应用与人员分别创建登录名与用户。
三 常用操作速查
- 登录名管理(实例级)
- 创建:CREATE LOGIN login_name WITH PASSWORD = ‘StrongP@ssw0rd’;
- 改密:ALTER LOGIN login_name WITH PASSWORD = ‘NewP@ssw0rd’;
- 删除:DROP LOGIN login_name;
- 数据库用户管理(数据库级)
- 创建:USE MyDB; CREATE USER user_name FOR LOGIN login_name;
- 删除:USE MyDB; DROP USER user_name;
- 角色管理
- 添加成员(新语法):ALTER ROLE db_datareader ADD MEMBER user_name;
- 移除成员(新语法):ALTER ROLE db_datareader DROP MEMBER user_name;
- 兼容旧语法:EXEC sp_addrolemember ‘db_datareader’, ‘user_name’;
- 对象级权限
- 授予:GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.YourTable TO user_name;
- 撤销:REVOKE SELECT ON dbo.YourTable FROM user_name;
- 验证与审计
- 查看某用户权限:USE MyDB; SELECT * FROM sys.database_permissions WHERE grantee_principal_id = USER_ID(‘user_name’);
- 登录审计:可创建服务器/数据库审计规范,记录失败与成功登录,用于安全合规。
四 典型场景与命令示例
- 只读用户(库级)
- USE MyDB; CREATE USER app_read FOR LOGIN login_read;
- ALTER ROLE db_datareader ADD MEMBER app_read;
- 读写用户(库级)
- USE MyDB; CREATE USER app_rw FOR LOGIN login_rw;
- ALTER ROLE db_datareader ADD MEMBER app_rw;
- ALTER ROLE db_datawriter ADD MEMBER app_rw;
- 表级只读
- USE MyDB; GRANT SELECT ON dbo.Orders TO analyst;
- 应用专用账户(最小权限)
- 仅授予目标 schema 的读写:
- USE MyDB; CREATE USER app FOR LOGIN login_app;
- GRANT INSERT, UPDATE, DELETE ON SCHEMA::dbo TO app;
- GRANT SELECT ON SCHEMA::dbo TO app;
- 撤销与验证
- 撤销某表的 UPDATE:REVOKE UPDATE ON dbo.Orders FROM app_rw;
- 验证:以该用户身份登录并执行相应操作,或用 sys.database_permissions 检查。
五 图形化管理与排错
- 图形化管理:可使用 SQL Server Management Studio(SSMS) 连接 Linux 上的 SQL Server,在“Security/Logins/Users”中管理登录名、用户、角色与对象权限。
- 常见问题排查:
- 连接失败:检查服务是否运行(sudo systemctl status mssql-server)、监听端口 1433、以及防火墙策略。
- 权限不足:确认用户已映射到正确的登录名,并已被加入相应数据库角色或授予对象权限。
- 密码策略:修改密码需满足实例的密码复杂度策略。