15.3 SQL Server用户授权
SQL Server用户授权(GRANT)
简介
使用CREATE USER
语句创建用户后,该用户对数据库对象(如表、视图和索引)没有任何权限。
要允许用户与数据库对象交互,需要向用户授予权限。例如,可以授予权限,以便用户可以从表中查询数据。
GRANT
语句可以向主体
授予对安全资源
的权限。
安全资源
是SQL Server授权系统管理访问权的资源。例如,表是安全资源
。
主体
是可以请求SQL Server资源的实体。例如,用户是SQL Server中的主体
。
GRANT基本语法:
GRANT permissions ON securable TO principal;
- 首先,在
GRANT
之后指定一个或多个权限。如果有多个权限,则需要使用逗号分隔。 - 其次,在
ON
关键字之后指定一个安全资源。 - 第三步,在
TO
关键字之后指定主体。
示例
首先,创建带人员表的HR数据库:
USE master; GO DROP DATABASE IF EXISTS HR; GO CREATE DATABASE HR; GO USE HR; CREATE TABLE People ( Id int IDENTITY PRIMARY KEY, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL ); INSERT INTO People (FirstName, LastName) VALUES ('John', 'Doe'), ('Jane', 'Doe'), ('Upton', 'Luis'), ('Dach', 'Keon');
然后创建一个登录peter
CREATE LOGIN peter WITH PASSWORD='XUnVe2di45.';
第三步,在HR数据库中为peter
登录创建一个用户peter
:
USE HR; CREATE USER peter FOR LOGIN peter;
第四步,使用peter用户连接SQL Server。您将看到用户peter可以访问HR数据库,但不能查看任何表。
第五步,切换到系统管理员连接,并在People
表中将SELECT
权限授予用户peter:
GRANT SELECT ON People TO peter;
第六步,用户peter可以看到People
表并从中选择数据:
SELECT * FROM People;
但是,用户peter无法将数据插入People表:
INSERT INTO People(FirstName, LastName) VALUES('Tony','Blair');
SQL Server报如下错误:
The INSERT permission was denied on the object 'People', database 'HR', schema 'dbo'.
同理,peter也不能从People中删除数据库:
DELETE FROM People WHERE Id = 1; -- error:The DELETE permission was denied on the object 'People', database 'HR', schema 'dbo'.
第五步,向用户peter
授予People
表上的INSERT
和DELETE
权限:
GRANT INSERT, DELETE ON People TO peter;
第六步,切换到用户peter的连接,并在People表中插入新行:
INSERT INTO People(FirstName, LastName) VALUES('Tony','Blair');
现在,用户peter
可以在People
表中插入数据和删除数据。
分类:
SQL Server
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器