在Ubuntu上管理SQL Server用户权限的步骤
在Ubuntu上管理SQL Server权限前,需先安装SQL Server实例及命令行工具mssql-tools
(包含sqlcmd
,用于执行T-SQL命令)。
sudo apt-get update
sudo apt-get install -y mssql-server
安装完成后,通过sudo /opt/mssql/bin/mssql-conf setup
命令配置SQL Server实例(设置SA密码、版本等)。sudo apt-get install -y mssql-tools unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
以上步骤确保可通过sqlcmd
工具连接SQL Server。使用sqlcmd
工具以系统管理员(SA)身份登录SQL Server:
sqlcmd -S localhost -U SA -P 'YourStrongPassword'
其中,YourStrongPassword
为安装时设置的SA账户密码。
登录名用于验证用户访问SQL Server实例的身份,需在master
数据库中创建:
USE master;
CREATE LOGIN [YourLoginName] WITH PASSWORD = 'YourComplexPassword';
GO
YourLoginName
:自定义登录名(如dev_user
);YourComplexPassword
:符合密码策略的强密码(建议包含大小写字母、数字和特殊字符)。数据库用户是登录名在特定数据库中的映射,需在目标数据库中创建:
USE YourDatabaseName; -- 切换至目标数据库(如`SalesDB`)
CREATE USER [YourUserName] FOR LOGIN [YourLoginName];
GO
YourUserName
:数据库中的用户名(可与登录名相同,如dev_user
);SQL Server提供预定义数据库角色,可快速分配常用权限集合:
USE YourDatabaseName;
-- 分配只读权限(SELECT)
ALTER ROLE db_datareader ADD MEMBER [YourUserName];
-- 分配读写权限(SELECT、INSERT、UPDATE、DELETE)
ALTER ROLE db_datawriter ADD MEMBER [YourUserName];
-- 分配数据库所有者权限(所有操作,谨慎使用)
ALTER ROLE db_owner ADD MEMBER [YourUserName];
GO
db_datareader
:允许读取所有用户表数据;db_datawriter
:允许插入、更新、删除所有用户表数据;db_owner
:拥有数据库所有权限(等同于管理员)。若需为用户分配特定表或存储过程的权限,可使用GRANT
语句:
USE YourDatabaseName;
-- 授予对特定表的SELECT权限
GRANT SELECT ON dbo.Customers TO [YourUserName];
-- 授予对特定表的INSERT、UPDATE、DELETE权限
GRANT INSERT, UPDATE, DELETE ON dbo.Orders TO [YourUserName];
-- 授予对特定存储过程的执行权限
GRANT EXECUTE ON dbo.GetCustomerData TO [YourUserName];
GO
可通过以下方式验证用户权限:
USE YourDatabaseName;
SELECT DP1.name AS DatabaseRoleName, DP2.name AS MemberName
FROM sys.database_role_members DRM
JOIN sys.database_principals DP1 ON DRM.role_principal_id = DP1.principal_id
JOIN sys.database_principals DP2 ON DRM.member_principal_id = DP2.principal_id
WHERE DP2.name = 'YourUserName';
sqlcmd -S localhost -U YourUserName -P 'YourComplexPassword' -d YourDatabaseName
输入SELECT * FROM dbo.Customers;
等命令,验证权限是否生效。db_datareader
);