> 唯美句子 > 请问如何用SQL语句为指定用户授权

请问如何用SQL语句为指定用户授权

请问如何用SQL语句为指定用户授权?

SQL语言用GRANT语句向用户授予操作权限,GRANT语句的一般格式为:

GRANT [,]...

[ON ]

TO [,]...

[WITH GRANT OPTION];

其语义为:将对指定操作对象的指定操作权限授予指定的用户。

不同类型的操作对象有不同的操作权限,常见的操作权限如表3-4所示。

表3-4 不同对象类型允许的操作权限

对象 对象类型 操作权限

属性列 TABLE SELECT, INSERT, UPDATE, DELETE ALL PRIVIEGES

视图 TABLE SELECT, INSERT, UPDATE, DELETE ALL PRIVIEGES

基本表 TABLE SELECT, INSERT, UPDATE, ALTER, INDEX,DELETE ALL PRIVIEGES

数据库 DATABASE CREATETAB

详细信息…

接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC即全体用户。

如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予别的用户。如果没有指定WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,但不能传播该权限。

例1

把查询Student表权限授给用户U1

GRANT SELECT ON TABLE Student TO U1;

例2

把对Student表和Course表的全部权限授予用户U2和U3

GRANT ALL PRIVILIGES ON TABLE Student, Course TO U2, U3;

例3

把对表SC的查询权限授予所有用户

GRANT SELECT ON TABLE SC TO PUBLIC;

例4

把查询Student表和修改学生学号的权限授给用户U4

详细信息…

这里实际上要授予U4用户的是对基本表Student的SELECT权限和对属性列Sno的UPDATE权限。授予关于属性列的权限时必须明确指出相应属性列名。完成本授权操作的SQL语句为:

GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;

例5

把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;

详细信息…

执行此SQL语句后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限,即由U5用户发上述GRANT命令给其他用户。

例如U5可以将此权限授予U6:

GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;

同样,U6还可以将此权限授予U7:

GRANT INSERT ON TABLE SC TO U7;

因为U6未给U7传播的权限,因此U7不能再传播此权限。

例6

DBA把在数据库S_C中建立表的权限授予用户U8

GRANT CREATETAB ON DATABASE S_C TO U8;

如何用SQL语句对所有的用户表授权

use databasename

grant

[DELETE, INSERT, REFERENCES, SELECT, UPDATE] on tablename to username

go

you can make a loop to go through all the tables and users in the database

在SQL SERVER中授权语句是否一次只能给一个表授权

是的,一次只能一个表。

GRANT CREATE DATABASE, CREATE TABLE

TO Mary, John, [Corporate\BobJ]

自己看看就知道了

用SQL语句查询当前用户的所有权限

下面内容供你参考

1.查看所有用户:

select * from dba_users;

select * from all_users;

select * from user_users;

2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):

select * from dba_sys_privs;

select * from user_sys_privs;

3.查看角色(只能查看登陆用户拥有的角色)所包含的权限

sql>select * from role_sys_privs;

4.查看用户对象权限:

select * from dba_tab_privs;

select * from all_tab_privs;

select * from user_tab_privs;

5.查看所有角色:

select * from dba_roles;

6.查看用户或角色所拥有的角色:

select * from dba_role_privs;

select * from user_role_privs;

7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)

select * from V$PWFILE_USERS

比如我要查看用户 wzsb的拥有的权限:

SQL> select * from dba_sys_privs where grantee='WZSB';

GRANTEE                        PRIVILEGE                                ADMIN_OPTION

------------------------------ ---------------------------------------- ------------

WZSB                           CREATE TRIGGER                           NO

WZSB                           UNLIMITED TABLESPACE                     NO

比如我要查看用户 wzsb的拥有的角色:

SQL> select * from dba_role_privs where grantee='WZSB';

GRANTEE   GRANTED_ROLE   ADMIN_OPTION  DEFAULT_ROLE

------------------------------ ------------------------------ ------------ ------------

WZSB                           DBA                         NO              YES

查看一个用户所有的权限及角色

select privilege from dba_sys_privs where grantee='WZSB'

union

select privilege from dba_sys_privs where grantee in

(select granted_role from dba_role_privs where grantee='WZSB' );

如何用SQL语句为指定用户授权

指定数据库,需要有所有表查询权限和视图创建权限use[database]Grantselectto[userName]GRANTCREATEVIEWTO[userName]

SQL中使用哪些语句实现权限的授予和回收

授予

grant 权限 on 对象 to 用户

拒绝

deny 权限 on 对象 to 用户

回收

revoke 权限 on 对象 from 用户

在SQL语言中授权的操作是通过什么语句实现的

一般是通过

grant 权限 to user

的方式实现的

sql的grant语句用法

GRANT

名称

GRANT — 赋予一个用户,一个组或所有用户访问权限

GRANT privilege [, ...] ON object [, ...]

TO { PUBLIC | GROUP group | username }

输入

privilege

可能的权限有:

SELECT

访问声明的表/视图的所有列/字段.

INSERT

向声明的表中插入所有列字段.

UPDATE

更新声明的所有列/字段.

DELETE

从声明的表中删除所有行.

RULE

在表/视图上定义规则 (参见 CREATE RULE 语句).

ALL

赋予所有权限.

object

赋予权限的对象名.可能的对象是:

table (表)

view (视图)

sequence (序列)

index (索引)

PUBLIC

代表是所有用户的简写.

GROUP group

将要赋予权限的组 group .目前的版本中,组必须是用下面方法显式创建的.

username

将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.

输出

CHANGE

如果成功,返回此信息.

ERROR: ChangeAcl: class "object" not found

如果所声明的对象不可用或不可能对声明的组或用户赋予权限.

描述

GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限.对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限.

一旦用户有某对象的权限,他就可以使用那个特权.不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限.

注意

目前,要想在 Postgres 里面只赋予几列权限,你必须创建一个包含那几列的视图(view),然后把权限赋予那几个视图。

使用 psql \z 命令获取关于现存对象权限的更多信息:

Database = lusitania

+------------------+---------------------------------------------+

| Relation | Grant/Revoke Permissions |

+------------------+---------------------------------------------+

| mytable | {"=rw","miriam=arwR","group todos=rw"} |

+------------------+---------------------------------------------+

Legend:

uname=arwR -- privileges granted to a user

group gname=arwR -- privileges granted to a GROUP

=arwR -- privileges granted to PUBLIC

r -- SELECT

w -- UPDATE/DELETE

a -- INSERT

R -- RULE

arwR -- ALL

小技巧: 目前,要创建一个 GROUP (组), 你将不得不手工向表 pg_group 中插入数据,像:

INSERT INTO pg_group VALUES ('todos');

CREATE USER miriam IN GROUP todos;

参考 REVOKE 语句重新分配访问权限.

用法

给所有用户向表 films 插入记录的权限:

GRANT INSERT ON films TO PUBLIC;

赋予用户 manuel 操作视图 kinds 的所有权限:

GRANT ALL ON kinds TO manuel;

兼容性

SQL92

SQL92 GRANT 语法允许对表中的某单独列/字段设置权限,并且允许设置一权限以赋予别人相同权限.

GRANT privilege [, ...]

ON object [ ( column [, ...] ) ] [, ...]

TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

这些字段与 Postgres 实现是兼容的,除了下面一些例外:

privilege

SQL92 允许声明附加的权限:

SELECT

REFERENCES

允许在一个声明的表的整合约束中使用某些或全部列/字段.

USAGE

允许使用一个域,字符集,集合或事务.如果声明的对象不是表/视图, privilege 只能声明为 USAGE.

object

[ TABLE ] table

SQL92 允许一个附加的非函数关键字 TABLE.

CHARACTER SET

允许使用声明的字符集.

COLLATION

允许使用声明的集合序列.

TRANSLATION

允许使用声明的字符集转换.

DOMAIN

允许使用声明的域.

WITH GRANT OPTION

允许向别人赋予同样权限.

在SQL语言中授权的操作是通过什么语句实

grant all privileges on 对象名 to 用户名;

这样写试一下,看看是否好用。

如何在一个grant语句里授权多个库

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 语句,组或角色的特定成员授予组或角色权力之下的对象的权限。

注释

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

说明 系统存储过程是例外,因为 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 语句。

语句 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 语句。

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

下面的固定数据库角色的成员有权限执行指定的 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 语句。

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

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

BEGIN TRANSACTION COMMIT TRANSACTION

PRINT RAISERROR

ROLLBACK TRANSACTION SAVE TRANSACTION

SET

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

示例

A. 授予语句权限

下面的示例给用户 Mary 和 John 以及 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_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

请问如何用SQL语句为指定用户授权:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!