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 @ 2023-01-30 14:16  平元兄  阅读(1152)  评论(0编辑  收藏  举报