一、操作前提说明
在 SQL Server 中,用户权限管理遵循 “登录名(Login)→ 数据库用户(User)→ 数据库角色/权限” 的层级关系:
- 登录名(Login):是服务器级别的身份验证主体(如 Windows 账户或 SQL Server 认证账户),用于登录 SQL Server 实例。
- 数据库用户(User):是数据库级别的主体,与登录名绑定,代表该登录名在具体数据库中的身份。
- 权限:通过直接授权或分配数据库角色(如
db_datareader、db_datawriter)赋予用户对数据库对象(表、视图、存储过程等)的操作能力。
本教程将详细演示如何为 SQL Server 认证账户(即通过用户名/密码登录的账户)创建登录名、关联数据库用户,并赋予特定数据库的读写权限(以 TestDB 数据库为例)。
![图片[1]_SQL Server 新建用户并赋予某数据库权限图文教程_知途无界](https://zhituwujie.com/wp-content/uploads/2025/11/d2b5ca33bd20251124091447.png)
二、操作步骤(附图文说明)
步骤 1:登录 SQL Server Management Studio (SSMS)
- 打开 SQL Server Management Studio (SSMS),使用管理员账户(如
sa或具有sysadmin角色的账户)连接目标 SQL Server 实例。 - 在连接界面选择 “SQL Server 身份验证”(若需创建 SQL 认证账户),输入管理员账号和密码后点击 “连接”。
📌 注意:若你只有 Windows 认证权限,也可通过 Windows 账户登录,但创建 SQL 认证登录名时仍需管理员权限。
步骤 2:创建登录名(Login)
登录名是服务器级别的身份凭证,需先创建才能关联到具体数据库。
- 展开服务器节点:在 SSMS 的“对象资源管理器”中,展开目标 SQL Server 实例(如
(local)或SERVER_NAME)。 - 进入“安全性”→“登录名”:
右键点击 “安全性” → 选择 “新建” → “登录名…”,弹出登录名创建窗口。 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 - 配置登录名基础信息:
- 登录名:输入要创建的用户名(如
TestUser)。 - 身份验证类型:选择 “SQL Server 身份验证”(若需密码登录)。
- 密码:设置该用户的登录密码(如
Test@123),并确认密码。 - 强制实施密码策略:建议勾选(遵循 SQL Server 密码复杂度规则)。
- 强制密码过期:按需勾选(通常不建议勾选,避免频繁改密)。
- 默认数据库:选择该用户登录后默认连接的数据库(如
TestDB,若不存在需提前创建)。
- 登录名:输入要创建的用户名(如
- 点击“用户映射”页签(关键步骤):
在登录名创建窗口中,切换到 “用户映射” 选项卡,这里将登录名与具体数据库关联并分配权限。- 勾选目标数据库:在左侧“数据库”列表中,勾选需要赋予权限的数据库(如
TestDB)。 - 数据库角色成员身份:在下方“数据库角色成员身份”中,选择该用户在目标数据库中的角色(后续会详细说明角色与直接权限的区别)。
- 勾选目标数据库:在左侧“数据库”列表中,勾选需要赋予权限的数据库(如
- 设置数据库用户别名(可选):
在“用户映射”页签下方的 “用户名” 输入框中,可以指定该登录名在目标数据库中的显示名称(通常与登录名一致,如TestUser)。若留空,系统默认与登录名相同。 - 点击“确定”保存:
完成配置后,点击窗口右下角的 “确定” 按钮,系统将自动创建登录名,并在目标数据库中生成关联的用户(User)。
📌 关键说明:
- 此时登录名
TestUser已具备连接到 SQL Server 实例的资格,但其在TestDB数据库中的具体权限取决于“用户映射”中选择的角色或后续手动分配的权限。- 若目标数据库(如
TestDB)不存在,需先通过 “数据库”→右键“新建数据库” 创建(本教程假设数据库已存在)。
步骤 3:验证登录名与数据库用户关联
- 查看数据库中的用户:
展开目标数据库(如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 - 测试登录(可选):
使用新创建的登录名TestUser和密码Test@123重新连接到 SQL Server,验证是否能成功登录并访问TestDB数据库。
步骤 4:赋予数据库具体权限(两种方式)
方式 1:通过数据库角色快速赋权(推荐新手)
数据库角色是预定义的权限集合,直接分配角色可快速赋予常用权限(如读、写、管理等)。
- 进入“用户映射”页签(或重新打开登录名配置):
若仍在登录名创建窗口,直接查看“用户映射”页签;若已关闭,右键目标数据库(如TestDB)→ “属性” → 切换到 “权限” 页签(更灵活)。 - 选择角色成员身份(以读写权限为例):
- **
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中的所有表执行SELECT、INSERT、UPDATE、DELETE操作(但无法修改表结构、管理用户等)。 - **
方式 2:手动分配具体权限(精准控制)
若需要更精细的权限(如仅允许操作特定表,或仅允许查询但不允许修改),可通过“显式授权”实现。
- 展开目标数据库的“安全性”→“用户”:
在 SSMS 中,展开 TestDB → “安全性” → “用户”,右键点击刚刚创建的用户(如TestUser)→ 选择 “属性”,或直接通过以下 SQL 命令操作。 - 通过 SQL 命令授权(推荐):
右键点击 “新建查询” 标签,输入以下命令(以赋予TestUser对TestDB中所有表的SELECT、INSERT、UPDATE权限为例):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] - 撤销权限(如需):
若需收回已授予的权限,使用REVOKE命令:REVOKE SELECT, INSERT ON SCHEMA::dbo TO [TestUser]
步骤 5:验证权限是否生效
- 使用新用户登录:
在 SSMS 中,右键点击“连接”→ “数据库引擎” → 选择 “SQL Server 身份验证”,输入登录名(如TestUser)和密码(如Test@123),连接后默认进入“默认数据库”(如TestDB)。 - 测试操作:
- 若赋予了
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_datareader 和 db_datawriter 包含哪些具体权限?
- **
db_datareader**:对数据库中所有用户表(非系统表)拥有SELECT权限。 - **
db_datawriter**:对数据库中所有用户表拥有INSERT、UPDATE、DELETE权限(但不包括架构修改、存储过程执行等)。
四、总结
通过本教程,你可以完成以下操作:
- 创建 SQL Server 认证登录名(支持用户名/密码登录)。
- 将登录名关联到目标数据库并生成数据库用户。
- 通过数据库角色(如
db_datareader/db_datawriter)快速赋权,或通过 显式授权(GRANT) 精准控制权限。 - 验证用户权限是否生效,确保符合业务需求。
按照上述步骤操作后,你的 SQL Server 数据库将实现安全的用户隔离与权限管理,满足多用户协作场景的需求!
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END

























暂无评论内容