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

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 DATABASECREATE DEFAULTCREATE FUNCTIONCREATE PROCEDURECREATE RULECREATE TABLECREATE VIEWBACKUP DATABASEBACKUP 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 语句,组或角色的特定成员授予组或角色权力之下的对象的权限。
注释
不允许有跨数据库权限;只能将当前数据库中的对象和语句的权限授予当前数据库中的用户。如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。

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

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

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

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

sp_helprotect 系统存储过程报告在数据库对象或用户上的权限。
权限
GRANT 权限依赖于所授予的语句权限和权限中涉及的对象。sysadmin 角色中的成员可在任何数据库中授予任何权限。对象所有者可为他们所拥有的对象授予权限。db_owner 或 db_securityadmin 角色的成员可授予其数据库中任何语句或对象上的任何权限。

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

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

dbcreator、processadmin、securityadmin 和 serveradmin 固定服务器角色的成员仅有权执行以下 Transact-SQL 语句。
语句dbcreatorprocessadminsecurityadminserveradminbulkadminALTER DATABASEXCREATE DATABASEXBULK INSERTXDBCCX (1) DENYX (2) GRANTX (2) KILLXRECONFIGUREXRESTOREXREVOKEX (2) SHUTDOWNX
(1) 有关更多信息,请参见 DBCC 语句。(2) 仅适用于 CREATE DATABASE 语句。

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

下面的固定数据库角色的成员有权限执行指定的 Transact-SQL 语句。
语句db_ownerdb_datareaderdb_datawriterdb_ddladmindb_backupoperatordb_securityadminALTER DATABASEXXALTER FUNCTIONXXALTER PROCEDUREXXALTER TABLEX (1) XALTER TRIGGERXXALTER VIEWX (1) XBACKUPXXCHECKPOINTXXCREATE DEFAULTXXCREATE FUNCTIONXXCREATE INDEXX (1) XCREATE PROCEDUREXXCREATE RULEXXCREATE TABLEXXCREATE TRIGGERX (1) XCREATE VIEWX   XDBCCXX (2) DELETEX (1) XDENYXXDENY on objectXDROPX (1) XEXECUTEX (1) GRANTXXGRANT on objectX (1) INSERTX (1) XREADTEXTX (1) XREFERENCESX (1) XRESTOREXREVOKEXXREVOKE on objectX (1) SELECTX (1) XSETUSERXTRUNCATE TABLEX (1) XUPDATEX (1) XUPDATE STATISTICSX (1) UPDATETEXTX (1) XWRITETEXTX (1) X
(1) 权限也适用于对象所有者。(2) 有关更多信息,请参见 DBCC 语句。

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

不需要权限即可执行的 Transact-SQL 语句有(已自动授予 public):
BEGIN TRANSACTIONCOMMIT TRANSACTIONPRINTRAISERRORROLLBACK TRANSACTIONSAVE TRANSACTIONSET 
有关执行系统存储过程所需权限的更多信息,请参见相应的系统存储过程。
示例A. 授予语句权限
下面的示例给用户 Mary 和 John 以及 Windows NT 组 Corporate\BobJ 授予多个语句权限。

GRANT CREATE DATABASE, CREATE TABLETO Mary, John, [Corporate\BobJ]
B. 在权限层次中授予对象权限
下例显示权限的优先顺序。首先,给 public 角色授予 SELECT 权限。然后,将特定的权限授予用户 Mary、John 和 Tom。于是这些用户就有了对 authors 表的所有权限。

USE pubsGOGRANT SELECTON authorsTO publicGO GRANT INSERT, UPDATE, DELETEON authorsTO Mary, John, TomGO
C. 给 SQL Server 角色授予权限
下面的示例将 CREATE TABLE 权限授予 Accounting 角色的所有成员。

GRANT CREATE TABLE TO Accounting
D. 用 AS 选项授予权限
用户 Jean 拥有表 Plan_Data。Jean 将表 Plan_Data 的 SELECT 权限授予 Accounting 角色(指定 WITH GRANT OPTION 子句)。用户 Jill 是 Accounting 的成员,他要将表 Plan_Data 上的 SELECT 权限授予用户 Jack,Jack 不是 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

时间: 2024-10-03 18:54:02

使用SQL语句赋予SQL Server数据库登录用户权限的相关文章

使用SQL语句取消SQL Server数据库登录用户权限

server|数据|数据库|用户权限|语句 REVOKE删除以前在当前数据库内的用户上授予或拒绝的权限.语法语句权限: REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ] 对象权限: REVOKE [ GRANT OPTION FOR ]    { ALL [ PRIVILEGES ] | permission [ ,...n ] }    {         [ ( column [ ,...n ] ) ]

使用SQL语句获取SQL Server数据库登录用户权限

server|数据|数据库|用户权限|语句 sp_helprotect返回一个报表,报表中包含当前数据库中某对象的用户权限或语句权限的信息.语法sp_helprotect [ [ @name = ] 'object_statement' ]    [ , [ @username = ] 'security_account' ]    [ , [ @grantorname = ] 'grantor' ]    [ , [ @permissionarea = ] 'type' ]参数[@name =

走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能

原文:走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能 最近公司来一个非常虎的dba  10几年的经验 这里就称之为蔡老师吧 在征得我们蔡老同意的前提下  我们来分享一下蔡老给我们带来的宝贵财富 欢迎其他的dba来拍砖  目录 1.什么是执行计划?执行计划是依赖于什么信息.2. 统一SQL语句的写法减少解析开销3. 减少SQL语句的嵌套4. 使用"临时表"暂存中间结果5. OLTP系统SQL语句必须采用绑定变量6. 倾斜字段的绑定变量窥测问题7. begin tra

SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)_MsSql

复制代码 代码如下: DECLARE @name VARCHAR(25) DECLARE @SQL VARCHAR(1000) DECLARE @logid INT DECLARE sysdatabase_name CURSOR FOR SELECT name FROM master.dbo.sysdatabases OPEN sysdatabase_name FETCH NEXT FROM sysdatabase_name INTO @name WHILE @@FETCH_STATUS = 0

SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)

复制代码 代码如下:DECLARE @name VARCHAR(25) DECLARE @SQL VARCHAR(1000) DECLARE @logid INT DECLARE sysdatabase_name CURSOR FOR SELECT name FROM master.dbo.sysdatabases OPEN sysdatabase_name FETCH NEXT FROM sysdatabase_name INTO @name WHILE @@FETCH_STATUS = 0

oracle sql语句 求sql语句

问题描述 oracle sql语句 求sql语句 数据源: 图片自动说明: 日期,投诉次数,分公司ID,分公司,投诉类别 环比:取查询日期的前一天,如:20150720,环比20150719 结果: 每万用户投诉比 每万用户投诉比环比增幅 个人投诉总次数 个人投诉环比增幅 集团投诉总次数 集团投诉环比增幅 解决方案 oracle sql语句优化Oracle用SQL语句分页 解决方案二: 分公司总用户数都没有,哪里来的每万用户投诉比? 解决方案三: 用decode吧,参考这个sql select

使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)

原文:使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据) 1.查询待导出表Ad中的数据. SELECT * FROM [DB_Temp].[dbo].[Ad] 2.编写存储过程. 1 --将表数据生成SQL脚本的存储过程 2 3 CREATE PROCEDURE dbo.UspOutputData 4 @tablename sysname 5 AS 6 declare @column varchar(1000) 7 declare @columndata varchar(10

学生机登录用户权限设置

随着计算机硬件价格的大幅下降,多数机房都采用了高性能的微机,操作系统也由原来的Windows98升级到了 Windows XP.为了实际教学工作,微机室的微机都安装了相应的多媒体教学软件(如苏亚星.深蓝易思等).这样,老师在上课时就能够及时掌控学生的学习情况.但有的学生为了在课堂做一些与课程无关的活动(如打游戏),他们会想办法脱离教师机地控制,他们通常是使本地机器的学生端程序停止下来.由于中止这些进程的方法有很多,所以要解决这个问题就要从登录用户权限入手,不给学生登录用户以中止进程的权限. 另外

绑定sql server数据库的用户与登录名

服务器重装系统,重新安装上sql server,附加上以前的数据库, 然后以前是每个数据库都有一个登录用于操作该数据库,其他数据库不能操作的, 附加上数据库后该数据库安全性里的用户能看到以前建立好的用户,但是在外面的系统级安全性的登录名中没有对应的用户,一个登录用户了又直接提示用户已存在的, 上网搜索了一下,解决方法如下: 系统级的安全性,登录名那里新建一个同名的用户,授权那里什么都不要选,就不会提示用户已存在 了,然后在执行如下 SQL语句,把数据库用户与登录名相关联: use qikai_g