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
表中插入数据和删除数据。