SQL Server 新建用户并赋予某数据库权限图文教程

一、操作前提说明

在 SQL Server 中,用户权限管理遵循 ​​“登录名(Login)→ 数据库用户(User)→ 数据库角色/权限”​​ 的层级关系:

  1. 登录名(Login)​​:是服务器级别的身份验证主体(如 Windows 账户或 SQL Server 认证账户),用于登录 SQL Server 实例。
  2. 数据库用户(User)​​:是数据库级别的主体,与登录名绑定,代表该登录名在具体数据库中的身份。
  3. 权限​:通过直接授权或分配数据库角色(如 db_datareaderdb_datawriter)赋予用户对数据库对象(表、视图、存储过程等)的操作能力。

本教程将详细演示如何为 ​SQL Server 认证账户​(即通过用户名/密码登录的账户)创建登录名、关联数据库用户,并赋予特定数据库的读写权限(以 TestDB 数据库为例)。

图片[1]_SQL Server 新建用户并赋予某数据库权限图文教程_知途无界

二、操作步骤(附图文说明)

步骤 1:登录 SQL Server Management Studio (SSMS)

  1. 打开 ​SQL Server Management Studio (SSMS)​,使用管理员账户(如 sa 或具有 sysadmin 角色的账户)连接目标 SQL Server 实例。
  2. 在连接界面选择 ​​“SQL Server 身份验证”​​(若需创建 SQL 认证账户),输入管理员账号和密码后点击 ​​“连接”​

📌 ​注意​:若你只有 Windows 认证权限,也可通过 Windows 账户登录,但创建 SQL 认证登录名时仍需管理员权限。


步骤 2:创建登录名(Login)

登录名是服务器级别的身份凭证,需先创建才能关联到具体数据库。

  1. 展开服务器节点​:在 SSMS 的“对象资源管理器”中,展开目标 SQL Server 实例(如 (local)SERVER_NAME)。
  2. 进入“安全性”→“登录名”​​:
    右键点击 ​​“安全性”​​ → 选择 ​​“新建”​​ → ​​“登录名…”​,弹出登录名创建窗口。 https://via.placeholder.com/400×200?text=%E5%AF%B9%E8%B1%A1%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8%E2%86%92%E5%AE%89%E5%85%A8%E6%80%A7%E2%86%92%E6%96%B0%E5%BB%BA%E2%86%92%E7%99%BB%E5%BD%95%E5%90%8D
  3. 配置登录名基础信息​:
    • 登录名​:输入要创建的用户名(如 TestUser)。
    • 身份验证类型​:选择 ​​“SQL Server 身份验证”​​(若需密码登录)。
    • 密码​:设置该用户的登录密码(如 Test@123),并确认密码。
    • 强制实施密码策略​:建议勾选(遵循 SQL Server 密码复杂度规则)。
    • 强制密码过期​:按需勾选(通常不建议勾选,避免频繁改密)。
    • 默认数据库​:选择该用户登录后默认连接的数据库(如 TestDB,若不存在需提前创建)。
    https://via.placeholder.com/400×300?text=%E7%99%BB%E5%BD%95%E5%90%8D%EF%BC%9ATestUser+SQL+%E8%AE%A4%E8%AF%81+%E5%AF%86%E7%A0%81+%E9%BB%98%E8%AE%A4%E6%95%B0%E6%8D%AE%E5%BA%93
  4. 点击“用户映射”页签​(关键步骤):
    在登录名创建窗口中,切换到 ​​“用户映射”​​ 选项卡,这里将登录名与具体数据库关联并分配权限。
    • 勾选目标数据库​:在左侧“数据库”列表中,勾选需要赋予权限的数据库(如 TestDB)。
    • 数据库角色成员身份​:在下方“数据库角色成员身份”中,选择该用户在目标数据库中的角色(后续会详细说明角色与直接权限的区别)。
    https://via.placeholder.com/400×300?text=%E5%8B%BE%E9%80%89TestDB+%E9%80%89%E6%8B%A9%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A7%92%E8%89%B2
  5. 设置数据库用户别名(可选)​​:
    在“用户映射”页签下方的 ​​“用户名”​​ 输入框中,可以指定该登录名在目标数据库中的显示名称(通常与登录名一致,如 TestUser)。若留空,系统默认与登录名相同。
  6. 点击“确定”保存​:
    完成配置后,点击窗口右下角的 ​​“确定”​​ 按钮,系统将自动创建登录名,并在目标数据库中生成关联的用户(User)。

📌 ​关键说明​:

  • 此时登录名 TestUser 已具备连接到 SQL Server 实例的资格,但其在 TestDB 数据库中的具体权限取决于“用户映射”中选择的角色或后续手动分配的权限。
  • 若目标数据库(如 TestDB)不存在,需先通过 ​​“数据库”→右键“新建数据库”​​ 创建(本教程假设数据库已存在)。

步骤 3:验证登录名与数据库用户关联

  1. 查看数据库中的用户​:
    展开目标数据库(如 TestDB)→ 展开 ​​“安全性”​​ → ​​“用户”​,可以看到刚刚创建的数据库用户(如 TestUser),其对应的登录名是 TestUser(服务器登录名)。 https://via.placeholder.com/400×200?text=TestDB%E2%86%92%E5%AE%89%E5%85%A8%E6%80%A7%E2%86%92%E7%94%A8%E6%88%B7%E2%86%92TestUser
  2. 测试登录​(可选):
    使用新创建的登录名 TestUser 和密码 Test@123 重新连接到 SQL Server,验证是否能成功登录并访问 TestDB 数据库。

步骤 4:赋予数据库具体权限(两种方式)

方式 1:通过数据库角色快速赋权(推荐新手)

数据库角色是预定义的权限集合,直接分配角色可快速赋予常用权限(如读、写、管理等)。

  1. 进入“用户映射”页签(或重新打开登录名配置)​​:
    若仍在登录名创建窗口,直接查看“用户映射”页签;若已关闭,右键目标数据库(如 TestDB)→ ​​“属性”​​ → 切换到 ​​“权限”​​ 页签(更灵活)。
  2. 选择角色成员身份​(以读写权限为例):
    • ​**db_datareader**​:允许用户读取数据库中的所有表数据(SELECT 权限)。
    • ​**db_datawriter**​:允许用户插入、更新、删除数据库中的所有表数据(INSERT/UPDATE/DELETE 权限)。
    • ​**db_owner**​:数据库所有者(拥有最高权限,慎用!)。
    操作示例​(赋予读写权限):
    在“用户映射”页签的 ​​“数据库角色成员身份”​​ 列表中,勾选 ​**db_datareader​ 和 ​db_datawriter,点击 ​​“确定”​**​ 保存。 https://via.placeholder.com/400×200?text=%E5%8B%BE%E9%80%89db_datareader+db_datawriter ​效果​:用户 TestUser 登录后,可对 TestDB 中的所有表执行 SELECTINSERTUPDATEDELETE 操作(但无法修改表结构、管理用户等)。

方式 2:手动分配具体权限(精准控制)

若需要更精细的权限(如仅允许操作特定表,或仅允许查询但不允许修改),可通过“显式授权”实现。

  1. 展开目标数据库的“安全性”→“用户”​​:
    在 SSMS 中,展开 ​TestDB​ → ​​“安全性”​​ → ​​“用户”​,右键点击刚刚创建的用户(如 TestUser)→ 选择 ​​“属性”​,或直接通过以下 SQL 命令操作。
  2. 通过 SQL 命令授权(推荐)​​:
    右键点击 ​​“新建查询”​​ 标签,输入以下命令(以赋予 TestUserTestDB 中所有表的 SELECTINSERTUPDATE 权限为例): USE [TestDB] -- 切换到目标数据库 GO -- 授予所有表的 SELECT、INSERT、UPDATE 权限 GRANT SELECT, INSERT, UPDATE ON SCHEMA::dbo TO [TestUser] -- 若需允许删除操作,追加 DELETE -- GRANT DELETE ON SCHEMA::dbo TO [TestUser]参数说明​:
    • SCHEMA::dbo:表示对 dbo 架构(默认架构)下的所有表/视图生效。若你的表属于其他架构(如 sales),需替换为 SCHEMA::sales
    • GRANT:授予权限关键字,可选权限包括 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、EXECUTE(执行存储过程)等。
    精准控制示例​(仅允许操作特定表 Employees): USE [TestDB] GO -- 授予 Employees 表的 SELECT 和 INSERT 权限 GRANT SELECT, INSERT ON [dbo].[Employees] TO [TestUser]
  3. 撤销权限(如需)​​:
    若需收回已授予的权限,使用 REVOKE 命令: REVOKE SELECT, INSERT ON SCHEMA::dbo TO [TestUser]

步骤 5:验证权限是否生效

  1. 使用新用户登录​:
    在 SSMS 中,右键点击“连接”→ ​​“数据库引擎”​​ → 选择 ​​“SQL Server 身份验证”​,输入登录名(如 TestUser)和密码(如 Test@123),连接后默认进入“默认数据库”(如 TestDB)。
  2. 测试操作​:
    • 若赋予了 db_datareader,尝试执行 SELECT * FROM dbo.Employees(假设存在该表),应能正常返回数据。
    • 若赋予了 db_datawriter,尝试执行 INSERT INTO dbo.Employees (Name) VALUES ('Test'),应能成功插入数据。
    • 若权限不足(如未授权 DELETE),执行 DELETE FROM dbo.Employees WHERE Name='Test' 会报错:​​“The SELECT permission was denied on the object ‘Employees’, database ‘TestDB’, schema ‘dbo’.”​

三、常见问题解答

Q1:为什么创建了登录名但无法登录?

  • 原因1​:登录名未关联到任何数据库(用户映射未配置)。
    解决​:重新编辑登录名,在“用户映射”页签中勾选目标数据库。
  • 原因2​:默认数据库不存在或已损坏。
    解决​:在登录名配置中,将“默认数据库”改为存在的数据库(如 master)。
  • 原因3​:密码错误或未启用 SQL 认证。
    解决​:检查登录名创建时的密码,或确认 SQL Server 实例配置为允许 SQL 认证(通过 ​​“服务器属性”→“安全性”​​ 查看“服务器身份验证”模式)。

Q2:如何赋予用户管理特定表的权限(如仅允许操作某张表)?

通过显式授权实现,例如:

USE [TestDB]
GO
-- 仅允许对 dbo.Orders 表执行 SELECT 和 UPDATE
GRANT SELECT, UPDATE ON [dbo].[Orders] TO [TestUser]

Q3:db_datareaderdb_datawriter 包含哪些具体权限?

  • ​**db_datareader**​:对数据库中所有用户表(非系统表)拥有 SELECT 权限。
  • ​**db_datawriter**​:对数据库中所有用户表拥有 INSERTUPDATEDELETE 权限(但不包括架构修改、存储过程执行等)。

四、总结

通过本教程,你可以完成以下操作:

  1. 创建 SQL Server 认证登录名​(支持用户名/密码登录)。
  2. 将登录名关联到目标数据库并生成数据库用户
  3. 通过数据库角色(如 db_datareader/db_datawriter)快速赋权,或通过 ​显式授权(GRANT)​​ 精准控制权限。
  4. 验证用户权限是否生效,确保符合业务需求。

按照上述步骤操作后,你的 SQL Server 数据库将实现安全的用户隔离与权限管理,满足多用户协作场景的需求!

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞24 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容