在CentOS上进行SQL Server权限管理前,需完成以下基础配置:
mssql-server包安装),并启动服务(sudo systemctl start mssql-server)。mssql)对数据目录(/var/opt/mssql/data)、日志目录(/var/opt/mssql/log)有读写权限(sudo chown -R mssql:mssql /var/opt/mssql;sudo chmod -R 750 /var/opt/mssql/data)。sudo firewall-cmd --permanent --zone=public --add-port=1433/tcp;sudo firewall-cmd --reload)。使用工具(如SQL Server Management Studio (SSMS)、sqlcmd命令行)连接到SQL Server实例:
localhost),选择身份验证方式(SQL Server身份验证需输入sa账号密码;Windows身份验证需加入域)。sqlcmd -S localhost -U sa -P your_password进入命令行。登录账户用于连接到SQL Server实例,分为SQL Server身份验证(用户名/密码)和Windows身份验证(域账户):
-- 创建SQL Server身份验证登录账户(示例:用户名`test_user`,密码`StrongPass123`)
CREATE LOGIN [test_user] WITH PASSWORD = 'StrongPass123';
-- 创建Windows身份验证登录账户(示例:域账户`DOMAIN\user`)
CREATE LOGIN [DOMAIN\user] FROM WINDOWS;
注意:SQL Server身份验证需启用混合模式(安装时勾选“混合模式身份验证”,或后续通过ALTER SERVER CONFIGURATION SET AUTHENTICATION MODE = MIXED;修改)。
登录账户需关联到具体数据库才能访问数据,使用CREATE USER命令:
-- 切换到目标数据库(如`TestDB`)
USE [TestDB];
-- 为登录账户创建数据库用户(用户名与登录账户一致)
CREATE USER [test_user] FOR LOGIN [test_user];
若为Windows身份验证,命令类似(CREATE USER [DOMAIN\user] FOR LOGIN [DOMAIN\user];)。
SQL Server提供多种内置数据库角色,可快速分配常用权限:
-- 分配只读权限(SELECT)
USE [TestDB];
EXEC sp_addrolemember 'db_datareader', 'test_user';
-- 分配读写权限(SELECT、INSERT、UPDATE、DELETE)
USE [TestDB];
EXEC sp_addrolemember 'db_datawriter', 'test_user';
-- 分配db_owner权限(完全控制,慎用)
USE [TestDB];
EXEC sp_addrolemember 'db_owner', 'test_user';
注意:db_owner权限过高,仅授予管理员;常规用户建议使用db_datareader/db_datawriter。
若内置角色无法满足需求,可创建自定义角色并分配特定权限:
-- 1. 创建自定义角色(如`custom_report_role`)
CREATE ROLE [custom_report_role];
-- 2. 分配具体权限(如`SELECT`权限给`Sales`表的`OrderID`、`Amount`列)
USE [TestDB];
GRANT SELECT ON [dbo].[Sales] ([OrderID], [Amount]) TO [custom_report_role];
-- 3. 将用户添加到自定义角色
USE [TestDB];
EXEC sp_addrolemember 'custom_report_role', 'test_user';
优势:避免过度授权,符合“最小权限原则”。
使用目标用户连接SQL Server,执行测试查询验证权限:
-- 使用sqlcmd以`test_user`身份连接
sqlcmd -S localhost -U test_user -P StrongPass123
-- 测试查询(若`db_datareader`权限生效,可查询`Sales`表)
SELECT * FROM [dbo].[Sales];
若查询成功,说明权限配置正确;若报错(如“SELECT权限被拒绝”),需检查角色/权限分配。
INSERT/UPDATE权限)。sys.database_principals、sys.database_permissions视图检查用户权限(如SELECT * FROM sys.database_principals WHERE type_desc = 'SQL_USER';)。sa账号(ALTER LOGIN sa DISABLE;)或设置强密码(勾选“强制实施密码策略”“强制密码过期”)。ALTER SERVER CONFIGURATION SET FORCE_ENCRYPTION = ON;),保护数据传输安全。通过以上步骤,可在CentOS上实现SQL Server的精细化权限管理,保障数据库安全。