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表上的INSERTDELETE权限:

GRANT INSERT, DELETE
ON People TO peter;

第六步,切换到用户peter的连接,并在People表中插入新行:

INSERT INTO People(FirstName, LastName)
VALUES('Tony','Blair');

现在,用户peter可以在People表中插入数据和删除数据。

posted @   平元兄  阅读(1278)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示