温馨提示×

在Ubuntu上如何管理SQL Server用户权限

小樊
51
2025-09-27 01:37:20
栏目: 云计算

在Ubuntu上管理SQL Server用户权限的步骤

1. 准备工作:安装SQL Server及命令行工具

在Ubuntu上管理SQL Server权限前,需先安装SQL Server实例及命令行工具mssql-tools(包含sqlcmd,用于执行T-SQL命令)。

  • 安装SQL Server:运行以下命令更新软件包并安装SQL Server:
    sudo apt-get update
    sudo apt-get install -y mssql-server
    
    安装完成后,通过sudo /opt/mssql/bin/mssql-conf setup命令配置SQL Server实例(设置SA密码、版本等)。
  • 安装mssql-tools
    sudo apt-get install -y mssql-tools unixodbc-dev
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    source ~/.bashrc
    
    以上步骤确保可通过sqlcmd工具连接SQL Server。

2. 连接到SQL Server实例

使用sqlcmd工具以系统管理员(SA)身份登录SQL Server:

sqlcmd -S localhost -U SA -P 'YourStrongPassword'

其中,YourStrongPassword为安装时设置的SA账户密码。

3. 创建服务器登录名(服务器级身份验证)

登录名用于验证用户访问SQL Server实例的身份,需在master数据库中创建:

USE master;
CREATE LOGIN [YourLoginName] WITH PASSWORD = 'YourComplexPassword';
GO
  • YourLoginName:自定义登录名(如dev_user);
  • YourComplexPassword:符合密码策略的强密码(建议包含大小写字母、数字和特殊字符)。

4. 创建数据库用户并映射到登录名

数据库用户是登录名在特定数据库中的映射,需在目标数据库中创建:

USE YourDatabaseName; -- 切换至目标数据库(如`SalesDB`)
CREATE USER [YourUserName] FOR LOGIN [YourLoginName];
GO
  • YourUserName:数据库中的用户名(可与登录名相同,如dev_user);
  • 此步骤将登录名与数据库用户关联,使用户能访问目标数据库。

5. 分配数据库角色(简化权限管理)

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:拥有数据库所有权限(等同于管理员)。

6. 授予特定对象权限(精细化控制)

若需为用户分配特定表或存储过程的权限,可使用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
  • 此步骤适用于需要限制用户仅能访问特定数据或执行特定操作的场景。

7. 验证权限设置

可通过以下方式验证用户权限:

  • 查看用户角色成员身份
    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';
    
  • 以用户身份登录测试
    退出SA登录,使用新用户连接并尝试执行操作:
    sqlcmd -S localhost -U YourUserName -P 'YourComplexPassword' -d YourDatabaseName
    
    输入SELECT * FROM dbo.Customers;等命令,验证权限是否生效。

权限管理最佳实践

  • 最小权限原则:仅授予用户完成工作所需的最低权限(如不需要修改数据的用户仅分配db_datareader);
  • 定期审查:每月检查一次用户权限,移除不再需要的角色或权限;
  • 避免使用SA账户:日常操作使用普通用户账户,SA账户仅用于管理员任务。

0