欢迎光临嘉善县救护车出租网
详情描述
SQL Server 新建用户并赋予数据库权限图文教程

一、准备工作

1.1 启动SQL Server Management Studio (SSMS)

1.2 连接到SQL Server实例

  • 输入服务器名称
  • 选择身份验证方式(Windows/SQL Server)
  • 点击"连接"

二、新建登录账号(两种方式)

方式一:使用SSMS图形界面

步骤1:打开"安全性"文件夹

步骤2:右键"登录名" → "新建登录名"

步骤3:配置登录信息

-- 示例配置:
-- 登录名: newuser
-- 身份验证: SQL Server身份验证
-- 密码: YourPassword123
-- 取消勾选"强制实施密码策略"(根据需求)

步骤4:设置默认数据库

方式二:使用T-SQL命令

-- 新建SQL Server登录账号
USE [master]
GO

CREATE LOGIN [newuser] 
WITH PASSWORD = N'YourPassword123',
     DEFAULT_DATABASE = [YourDatabase],
     CHECK_EXPIRATION = OFF,
     CHECK_POLICY = OFF
GO

三、在目标数据库中创建用户

方式一:使用SSMS图形界面

步骤1:展开目标数据库 → 安全性 → 右键"用户" → "新建用户"

步骤2:配置用户信息

-- 示例配置:
-- 用户名: newuser_db
-- 登录名: newuser (选择刚才创建的登录名)
-- 默认架构: dbo

方式二:使用T-SQL命令

-- 切换到目标数据库
USE [YourDatabase]
GO

-- 创建数据库用户并关联登录账号
CREATE USER [newuser_db] FOR LOGIN [newuser]
WITH DEFAULT_SCHEMA = [dbo]
GO

四、授予数据库权限(三种方法)

方法1:通过SSMS授予角色权限

步骤1:打开用户属性 → 选择"成员身份"页签

步骤2:选择数据库角色

-- 常用角色说明:
-- db_owner: 数据库所有者,拥有全部权限
-- db_datareader: 可以读取所有表数据
-- db_datawriter: 可以插入、更新、删除所有表数据
-- db_ddladmin: 可以执行DDL操作(创建、修改表等)
-- public: 默认角色,所有用户都有

方法2:通过SSMS授予具体权限

步骤1:右键数据库 → 属性 → 权限

步骤2:选择用户 → 勾选具体权限

方法3:使用T-SQL命令授权

-- 授予数据库角色成员身份
USE [YourDatabase]
GO

-- 加入db_datareader角色(只读)
EXEC sp_addrolemember 'db_datareader', 'newuser_db'
GO

-- 加入db_datawriter角色(增删改)
EXEC sp_addrolemember 'db_datawriter', 'newuser_db'
GO

-- 授予具体权限
USE [YourDatabase]
GO

-- 授予SELECT权限
GRANT SELECT ON [dbo].[TableName] TO [newuser_db]
GO

-- 授予EXECUTE权限(存储过程)
GRANT EXECUTE ON [dbo].[StoredProcedure] TO [newuser_db]
GO

-- 授予所有权限
GRANT ALL ON [dbo].[TableName] TO [newuser_db]
GO

五、验证权限设置

5.1 使用新建用户登录测试

步骤1:断开当前连接 步骤2:使用新建用户登录

5.2 执行权限测试

-- 测试只读权限
SELECT * FROM [dbo].[YourTable]  -- 应该成功

-- 测试写入权限(如果授予了)
INSERT INTO [dbo].[YourTable] (Column1) VALUES ('Test')  -- 根据权限可能成功或失败

-- 测试无权限的操作
DROP TABLE [dbo].[YourTable]  -- 应该失败

5.3 查看用户权限

-- 查看用户拥有的权限
USE [YourDatabase]
GO

-- 查看用户角色成员身份
SELECT 
    dp.name AS UserName,
    roles.name AS RoleName
FROM sys.database_role_members rm
JOIN sys.database_principals dp ON rm.member_principal_id = dp.principal_id
JOIN sys.database_principals roles ON rm.role_principal_id = roles.principal_id
WHERE dp.name = 'newuser_db'
GO

-- 查看具体权限
SELECT 
    USER_NAME(grantee_principal_id) AS UserName,
    permission_name,
    state_desc,
    OBJECT_NAME(major_id) AS ObjectName
FROM sys.database_permissions
WHERE USER_NAME(grantee_principal_id) = 'newuser_db'
GO

六、权限管理脚本示例

6.1 完整权限设置脚本

-- ============================================
-- SQL Server用户权限设置完整脚本
-- ============================================

-- 1. 创建登录账号
USE [master]
GO
CREATE LOGIN [sales_user] 
WITH PASSWORD = N'Sales@2024',
     DEFAULT_DATABASE = [SalesDB],
     CHECK_EXPIRATION = OFF,
     CHECK_POLICY = OFF
GO

-- 2. 创建数据库用户
USE [SalesDB]
GO
CREATE USER [sales_user_db] FOR LOGIN [sales_user]
WITH DEFAULT_SCHEMA = [sales]
GO

-- 3. 授予角色权限
EXEC sp_addrolemember 'db_datareader', 'sales_user_db'
EXEC sp_addrolemember 'db_datawriter', 'sales_user_db'
GO

-- 4. 授予架构权限
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::[sales] TO [sales_user_db]
GO

-- 5. 授予具体对象权限(可选)
GRANT EXECUTE ON [dbo].[usp_GetSalesReport] TO [sales_user_db]
GO

-- 6. 拒绝特定权限(如果需要)
DENY DELETE ON [dbo].[AuditLog] TO [sales_user_db]
GO

6.2 权限撤销脚本

-- 移除角色成员身份
EXEC sp_droprolemember 'db_datawriter', 'sales_user_db'
GO

-- 撤销具体权限
REVOKE DELETE ON [dbo].[YourTable] FROM [sales_user_db]
GO

-- 删除数据库用户
DROP USER [sales_user_db]
GO

-- 删除登录账号(在master数据库中)
USE [master]
GO
DROP LOGIN [sales_user]
GO

七、最佳实践和注意事项

7.1 安全建议

最小权限原则:只授予必要的最小权限 使用角色管理:通过数据库角色批量管理权限 定期审计:定期检查用户权限 密码策略:启用强密码策略 使用Windows身份验证:如果环境允许,优先使用Windows身份验证

7.2 常见问题解决

问题1:用户无法登录

-- 检查登录账号状态
SELECT name, is_disabled FROM sys.server_principals WHERE name = 'newuser'

-- 启用被禁用的账号
ALTER LOGIN [newuser] ENABLE

问题2:用户无数据库访问权限

-- 检查数据库用户映射
USE [YourDatabase]
SELECT name FROM sys.database_principals WHERE name = 'newuser_db'

问题3:权限不生效

-- 清除权限缓存
DBCC FREEPROCCACHE
GO

八、可视化权限管理工具推荐

SSMS内置工具:最常用,功能全面 ApexSQL Manage:第三方工具,提供更友好的界面 dbForge Studio:商业化工具,提供高级功能

总结

通过本教程,您已经学会了:

  • ✅ 创建SQL Server登录账号
  • ✅ 在目标数据库中创建用户
  • ✅ 授予数据库角色权限
  • ✅ 授予具体对象权限
  • ✅ 验证权限设置
  • ✅ 使用T-SQL脚本管理权限

按照"先创建登录账号 → 再创建数据库用户 → 最后分配权限"的流程操作,可以有效管理SQL Server用户权限。