在Debian系统上设置SQL Server权限前,需先完成SQL Server的安装及命令行工具配置:
sudo apt update && sudo apt upgrade -y
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=/usr/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 > /dev/null
sudo apt install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup # 按提示设置SA用户密码
sudo apt install -y mssql-tools unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc # 添加环境变量
source ~/.bashrc
以上步骤确保SQL Server正常运行,并准备好sqlcmd等工具用于权限管理。
使用系统管理员账户(默认sa)登录SQL Server,为后续权限操作做准备:
sqlcmd -S localhost -U sa -P 'YourStrongSAPassword'
输入密码后,进入SQL Server命令行界面(显示1>表示登录成功)。
登录名用于验证用户访问SQL Server实例的合法性,属于服务器级权限:
-- 在master数据库中创建登录名(示例:创建名为"newuser"的登录名,密码为"YourPassword123")
CREATE LOGIN newuser WITH PASSWORD = 'YourPassword123';
GO
说明:
将登录名映射到具体数据库,创建数据库级用户,用于操作该数据库:
-- 切换到目标数据库(示例:切换到"mydatabase"数据库)
USE mydatabase;
GO
-- 基于登录名创建数据库用户(示例:创建名为"newuser"的数据库用户)
CREATE USER newuser FOR LOGIN newuser;
GO
说明:
权限分配可通过角色分配(简化管理)或直接授权(精细化控制)实现:
SQL Server提供预定义数据库角色,覆盖常见权限需求:
-- 将用户添加到"db_datareader"角色(授予SELECT权限)
USE mydatabase;
GO
EXEC sp_addrolemember 'db_datareader', 'newuser';
GO
-- 将用户添加到"db_datawriter"角色(授予INSERT/UPDATE/DELETE权限)
EXEC sp_addrolemember 'db_datawriter', 'newuser';
GO
-- 将用户添加到"db_owner"角色(授予数据库所有权限,谨慎使用)
EXEC sp_addrolemember 'db_owner', 'newuser';
GO
常用预定义角色:
db_datareader:读取数据(SELECT)。db_datawriter:写入数据(INSERT/UPDATE/DELETE)。db_owner:数据库所有者(所有权限)。db_ddladmin:执行DDL语句(CREATE/ALTER/DROP)。若需更细粒度的权限(如特定表的特定操作),可使用GRANT语句:
-- 授予用户对"employees"表的SELECT权限
USE mydatabase;
GO
GRANT SELECT ON dbo.employees TO newuser;
GO
-- 授予用户对"products"表的INSERT/UPDATE权限
GRANT INSERT, UPDATE ON dbo.products TO newuser;
GO
-- 授予用户对"orders"表的DELETE权限
GRANT DELETE ON dbo.orders TO newuser;
GO
说明:
dbo为默认架构,可根据实际情况替换为自定义架构。创建完成后,可通过以下方式验证用户权限:
sqlcmd -S localhost -U newuser -P 'YourPassword123'
USE mydatabase;
GO
SELECT * FROM sys.database_permissions WHERE grantee_principal_id = USER_ID('newuser');
GO
结果将显示用户拥有的权限类型(如SELECT、INSERT)及对应对象。若需为多个用户分配相同权限,可创建自定义角色并分配权限:
-- 创建自定义角色(示例:创建"sales_team"角色)
USE mydatabase;
GO
CREATE ROLE sales_team;
GO
-- 授予角色权限(示例:授予销售团队对"orders"表的SELECT/INSERT权限)
GRANT SELECT, INSERT ON dbo.orders TO sales_team;
GO
-- 将用户添加到自定义角色
EXEC sp_addrolemember 'sales_team', 'newuser';
GO
优势:
db_owner则不使用)。sys.database_permissions视图定期检查权限分配情况。