`
linqincai
  • 浏览: 24151 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

使用SQL语句赋予SQL Server数据库登录用户权限

阅读更多

本文转载自:

 

GRANT

在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句。

语法

语句权限:

GRANT { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]

对象权限:

GRANT
    { ALL [ PRIVILEGES ] | permission [ ,...n ] }
    {
        [ ( column [ ,...n ] ) ] ON { table | view
}
        | ON { table | view } [ ( column [ ,...n ] ) ]
        | ON { stored_procedure | extended_procedure
}
        | ON { user_defined_function }
    }
TO security_account [ ,...n ]
[ WITH GRANT OPTION ]
[ AS { group | role
} ]

参数

ALL

表示授予所有可用的权限。对于语句权限,只有 sysadmin 角色成员可以使用 ALL。对于对象权限,sysadmin db_owner 角色成员和数据库对象所有者都可以使用 ALL。

statement

是被授予权限的语句。语句列表可以包括:

  • CREATE DATABASE

  • CREATE DEFAULT

  • CREATE FUNCTION

  • CREATE PROCEDURE

  • CREATE RULE

  • CREATE TABLE

  • CREATE VIEW

  • BACKUP DATABASE

  • BACKUP LOG

n

一个占位符,表示此项可在逗号分隔的列表中重复。

TO

指定安全帐户列表。

security_account

是权限将应用的安全帐户。安全帐户可以是:

  • Microsoft® SQL Server™ 用户。

  • SQL Server 角色。

  • Microsoft Windows NT® 用户。

  • Windows NT 组。

当权限被授予一个 SQL Server 用户或 Windows NT 用户帐户,指定的 security_account 是权限能影响到的唯一帐户。若权限被授予 SQL Server 角色或 Windows NT 组,权限可影响到当前数据库中该组或该角色成员的所有用户。若组或角色和它们的成员之间存在权限冲突,最严格的权限 (DENY) 优先起作用。security_account 必须在当前数据库中存在;不可将权限授予其它数据库中的用户、角色或组,除非已为该用户在当前数据库中创建或给予了访问权限。

两个特殊的安全帐户可用于 GRANT 语句。授予 public 角色的权限可应用于数据库中的所有用户。授予 guest 用户的权限可为所有在数据库中没有用户帐户的用户使用。

当授予某个 Windows NT 本地组或全局组权限时,请指定在其上定义该组的域名或计算机名,然后依次输入反斜线和组名。但是,若要授予访问 Windows NT 内置本地组的权限,请指定 BUILTIN 而不是域名或计算机名。

PRIVILEGES

是可以包含在符合 SQL-92 标准的语句中的可选关键字。

permission

是当前授予的对象权限。当在表、表值函数或视图上授予对象权限时,权限列表可以包括这些权限中的一个或多个:SELECT、INSERT、DELETE、REFENENCES 或 UPDATE。列列表可以与 SELECT 和 UPDATE 权限一起提供。如果列列表未与 SELECT 和 UPDATE 权限一起提供,那么该权限应用于表、视图或表值函数中的所有列。

在存储过程上授予的对象权限只可以包括 EXECUTE。在标量值函数上授予的对象权限可以包括 EXECUTE 和 REFERENCES。

为在 SELECT 语句中访问某个列,该列上需要有 SELECT 权限。为使用 UPDATE 语句更新某个列,该列上需要有 UPDATE 权限。

为创建引用某个表的 FOREIGN KEY 约束,该表上需要有 REFERENCES 权限。

为使用引用某个对象的 WITH SCHEMABINDING 子句创建 FUNCTION 或 VIEW,该对象上需要有 REFERENCES 权限。

column

是当前数据库中授予权限的列名。

table

是当前数据库中授予权限的表名。

view

是当前数据库中被授予权限的视图名。

stored_procedure

是当前数据库中授予权限的存储过程名。

extended_procedure

是当前数据库中授予权限的扩展存储过程名。

user_defined_function

是当前数据库中授予权限的用户定义函数名。

WITH GRANT OPTION

表示给予了 security_account 将指定的对象权限授予其它安全帐户的能力。WITH GRANT OPTION 子句仅对对象权限有效。

AS {group | role}

指当前数据库中有执行 GRANT 语句权力的安全帐户的可选名。当对象上的权限被授予一个组或角色时使用 AS,对象权限需要进一步授予不是组或角色的成员的用户。因为只有用户(而不是组或角色)可执行 GRANT 语句,组或角色的特定成员授予组或角色权力之下的对象的权限。

注释

不允许有跨数据库权限;只能将当前数据库中的对象和语句的权限授予当前数据库中的用户。如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。

<!--NOTE-->

说明  系统存储过程是例外,因为 EXECUTE 权限已经授予 public 角色,允许任何人去执行。但是在执行系统存储过程后,将检查用户的角色成员资格。如果此用户不是运行此存储过程所需要的适当的固定服务器或数据库角色的成员,则此存储过程不会继续执行。

<!--/NOTE-->

 

REVOKE 语句可用于删除已授予的权限,DENY 语句可用于防止用户通过 GRANT 语句获得权限给他们的用户帐户。

授予权限删除所授予级别(用户、组或角色)上的已拒绝权限或已废除权限。在另一级别(诸如包含此用户的组或角色)上被拒绝的同一权限优先起作用。但是,虽然在另一级别上所废除的同一权限仍然适用,但它并不阻止用户访问该对象。

如果用户激活应用程序角色,对此用户通过该应用程序角色访问的任何对象,GRANT 的作用为空。因此,尽管一个用户可能被授予了对当前数据库中的指定对象的访问权限,但是如果此用户使用对此对象无访问权限的应用程序角色,则在应用程序角色激活期间,此用户也没有此对象的访问权限。

sp_helprotect 系统存储过程报告在数据库对象或用户上的权限。

权限

GRANT 权限依赖于所授予的语句权限和权限中涉及的对象。sysadmin 角色中的成员可在任何数据库中授予任何权限。对象所有者可为他们所拥有的对象授予权限。db_ownerdb_securityadmin 角色的成员可授予其数据库中任何语句或对象上的任何权限。

需要权限的语句是那些在数据库中增加对象,或对数据库执行管理活动的语句。每条需要权限的语句都有一个特定的角色集,自动有权限执行此语句。例如,sysadmindb_ownerdb_ddladmin 角色的成员默认有CREATE TABLE 权限。sysadmin db_owner 角色以及表的所有者默认有对表执行 SELECT 语句的权限。

有一些 Transact-SQL 语句不能被授予权限;执行这些语句要求有固定角色中的成员资格,此角色有默示执行特殊语句的权限。例如,若要执行 SHUTDOWN 语句,用户必须添加为 serveradmin 角色中的成员。

dbcreator、processadminsecurityadminserveradmin 固定服务器角色的成员仅有权执行以下 Transact-SQL 语句。

 

语句 dbcreator processadmin securityadmin serveradmin bulkadmin
ALTER DATABASE X        
CREATE DATABASE X        
BULK INSERT         X
DBCC       X (1)  
DENY     X (2)    
GRANT     X (2)    
KILL   X      
RECONFIGURE       X  
RESTORE X        
REVOKE     X (2)    
SHUTDOWN       X  

(1) 有关更多信息,请参见 DBCC 语句。
(2) 仅适用于 CREATE DATABASE 语句。

<!--NOTE-->

说明  diskadminsetupadmin 固定服务器角色的成员没有权限执行任何 Transact-SQL 语句,他们只能执行特定的系统存储过程。但是,sysadmin 固定服务器角色的成员有权限执行所有的 Transact-SQL 语句。

<!--/NOTE-->

 

下面的固定数据库角色的成员有权限执行指定的 Transact-SQL 语句。

 


语句
db_owner
db_datareader
db_datawriter
db_ddladmin db_backupoperator db_securityadmin
ALTER DATABASE X     X    
ALTER FUNCTION X     X    
ALTER PROCEDURE X     X    
ALTER TABLE X (1)     X    
ALTER TRIGGER X     X    
ALTER VIEW X (1)     X    
BACKUP X       X  
CHECKPOINT X       X  
CREATE DEFAULT X     X    
CREATE FUNCTION X     X    
CREATE INDEX X (1)     X    
CREATE PROCEDURE X     X    
CREATE RULE X     X    
CREATE TABLE X     X    
CREATE TRIGGER X (1)     X    
CREATE VIEW X      X    
DBCC X       X (2)  
DELETE X (1)   X      
DENY X         X
DENY on object X          
DROP X (1)     X    
EXECUTE X (1)          
GRANT X         X
GRANT on object X (1)          
INSERT X (1)   X      
READTEXT X (1) X        
REFERENCES X (1)     X    
RESTORE X          
REVOKE X         X
REVOKE on object X (1)          
SELECT X (1) X        
SETUSER X          
TRUNCATE TABLE X (1)     X    
UPDATE X (1)   X      
UPDATE STATISTICS X (1)          
UPDATETEXT X (1)   X      
WRITETEXT X (1)   X      

(1) 权限也适用于对象所有者。
(2) 有关更多信息,请参见 DBCC 语句。

<!--NOTE-->

说明  db_accessadmin 固定数据库角色的成员没有执行任何 Transact-SQL 语句的权限,只可执行特定的系统存储过程。

<!--/NOTE-->

 

不需要权限即可执行的 Transact-SQL 语句有(已自动授予 public):

 

BEGIN TRANSACTION COMMIT TRANSACTION
PRINT RAISERROR
ROLLBACK TRANSACTION SAVE TRANSACTION
SET  

有关执行系统存储过程所需权限的更多信息,请参见相应的系统存储过程。

示例
A. 授予语句权限

下面的示例给用户 MaryJohn 以及 Windows NT 组 Corporate\BobJ 授予多个语句权限。

GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]
B. 在权限层次中授予对象权限

下例显示权限的优先顺序。首先,给 public 角色授予 SELECT 权限。然后,将特定的权限授予用户 Mary、John Tom。于是这些用户就有了对 authors 表的所有权限。

USE pubs
GO

GRANT SELECT
ON authors
TO public
GO 

GRANT INSERT, UPDATE, DELETE
ON authors
TO Mary, John, Tom
GO
C. 给 SQL Server 角色授予权限

下面的示例将 CREATE TABLE 权限授予 Accounting 角色的所有成员。

GRANT CREATE TABLE TO Accounting
D. 用 AS 选项授予权限

用户 Jean 拥有表 Plan_DataJean 将表 Plan_Data 的 SELECT 权限授予 Accounting 角色(指定 WITH GRANT OPTION 子句)。用户 JillAccounting 的成员,他要将表 Plan_Data 上的 SELECT 权限授予用户 JackJack 不是 Accounting 的成员。

因为对表 Plan_Data 用 GRANT 语句授予其他用户 SELECT 权限的权限是授予 Accounting 角色而不是显式地授予 Jill,不能因为已授予 Accounting 角色中成员该权限,而使 Jill 能够授予表的权限。Jill 必须用 AS 子句来获得 Accounting 角色的授予权限。

/* User Jean */
GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION

/* User Jill */
GRANT SELECT ON Plan_Data TO Jack AS Accounting

<!--RELATEDTOPICSLIST-->

分享到:
评论

相关推荐

    SQL21日自学通

    使用SQL 来生成SQL 语句的目的351 几个SQL*PLUS 命令352 SET ECHO ON/OFF353 SET FEEDBACK ON/OFF353 SET HEADING ON/OFF 353 SPOOL FILENAME/OFF353 START FILENAME354 ED FILENAME354 计算所有的表中的行数354 为...

    [详细完整版]数据库与架构.doc

    分离主体与架构 以前的版本,如SQL Server 2000,提供有CREATE SCHEMA语句,但是由于在用户和架构之间的隐式关系不能被更改或删除,所以它并没有 任何有效的用途。实际上,这种关系是如此紧密以至于很多SQL Server ...

    小区物业管理毕业设计java源码+毕设

    Internet已经成为人们生活、工作、学习...本文中数据库服务器端采用了SQL SERVER2000作为后台数据库,以先进的JDBC技术与数据库连接,结合SQL语句处理对用户分类,添加,删除,修改等操作,使Web与数据库紧密联系起来。

    oracle数据库经典题目

    系统权限提供了在Oracle数据库系统范围内执行某种任务的操作能力,而对象权限则是一种赋予用户在指定的数据库对象(如表、视图、过程等) 16. Oralce数据库在进行物理备份有联机备份和脱机备份两种方式可供选择。 ...

    ORCALE语句大全

    执行sql语句 start D:\1.sql 或者 @ D:\1.sql 编辑sql语句 edit D:\1.sql www.2cto.com 截取屏幕上的内容 spool D:\1.sql(开始截取) spool off(停止截取) 4 用户管理 创建用户 create user zhu identified...

    ASP.NET3.5典型模块开发源代码

    第1章 登录验证模块 1 1.1 开发站点前的配置 1 1.1.1 创建Web站点 1 1.1.2 使用站点安全工具配置身份验证...28.4 SQL Server数据库缓存依赖 384 28.4.1 缓存依赖接口ICacheDependency 384 28.4.2 缓存依赖...

    21天学习SQL V1.0

    21天学习SQL V1.0.pdf 66 SQL 21 日自学通(V1.0) 翻译人笨猪 EMAIL wyhsillypig@163.com 2 日期/时间函数.........................................................................................................

    仿淘宝网程序无错版

    运行环境:WinXP/2000/2003,IIS,SQLServer2000,Framework2.0,以上软件如果没有,请安装。 如果为虚拟主机请联系管理员索取SQLServer库名,索取SQLServer用户名、密码,主机地址。 该文件夹必须有读写权限,否则有些...

    cmd操作命令和linux命令大全收集

    93. cliconfg-------SQL SERVER 客户端网络实用程序 94. Clipbrd--------剪贴板查看器 95. conf-----------启动netmeeting 96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC...

    Linux程序设计 第4版.haozip01

    8.3.3 执行sql语句 288 8.3.4 更多的函数 301 8.4 cd数据库应用程序 301 8.4.1 创建表 302 8.4.2 添加数据 304 8.4.3 使用c语言访问数据 306 8.5 小结 316 第9章 开发工具 317 9.1 多个源文件带来的问题 317...

    Linux程序设计 第4版.haozip02

    8.3.3 执行sql语句 288 8.3.4 更多的函数 301 8.4 cd数据库应用程序 301 8.4.1 创建表 302 8.4.2 添加数据 304 8.4.3 使用c语言访问数据 306 8.5 小结 316 第9章 开发工具 317 9.1 多个源文件带来的问题 317...

    java 面试题 总结

    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、...

Global site tag (gtag.js) - Google Analytics