友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第47部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
ALTER ANY INDEX 允许受权人更改任何模块中的索引
ALTER ANY PROCEDURE 允许受权人更改任何的存储过程 函数并打包到任何模块中
ALTER ANY ROLE 允许受权人更改数据库中的任何角色
ALTER ANY TABLE 允许受权人更改模块中的表和视图
ALTER ANY TRIGGER 允许受权人能够 不能或编译任何模块中的触发机制
ALTER DATABASE 允许受权人改变数据库
允许受权人更改用户 该权限允许受权人改变其它用户的密码或鉴定方
ALTER USER 法 指定配额或表空间 设置默认的或临时的表空间 指定一个profile
或默认角色
CREATE ANY INDEX 允许受权人在任何模块的任何表中创建索引
CREATE ANY PROCEDURE 允许受权人创建存储过程 函数并打包到任何模块中
允许受权人在任何模块内创建表 创建表的模块的所有者必须拥有配额
CREATE ANY TABLE
及表空间以存放表
CREATE ANY TRIGGER 允许受权人在与任何模块相关联的表的模块中创建触发机制
CREATE ANY VIEW 允许受权人在任何模块中创建视图
CREATE PROCEDURE 允许受权人创建存储过程 函数并打包到他们自己的模块中
CREATE PROFILE 允许受权人创建profiles。
CREATE ROLE 允许受权人创建角色
CREATE SYNONYM 允许受权人在他们自己的模块中创建同义字
允许受权人在他们自己的模块中创建表 要创建一个表 受权人必须有
CREATE TABLE
表空间配额以存放表
CREATE TRIGGER 允许受权人在他们自己的模块中创建数据库触发机制
允许受权人创建用户 该权限也允许创建人指定表空间配额 设置默认
CREATE USER
和临时的表空间 并指定profile作为CREATE USER语句的一部分
CREATE VIEW 允许受权人在他们自己的模块中创建视图
DELETE ANY TABLE 允许受权人从任何模块的表和视图中删除行或截表
DROP ANY INDEX 允许受权人从任何模块中删除索引
DROP ANY PROCEDURE 允许受权人删除任何模块中的包 存储过程及函数
DROP ANY ROLE 允许受权人删除角色
DROP ANY SYNONYM 允许受权人删除任何模块中的同义字权限
DROP ANY TABLE 允许受权人删除任何模块中的表
DROP ANY TRIGGER 允许受权人删除任何模块中的数据库触发机制
DROP ANY VIEW 允许受权人删除任何模块中的视图
DROP USER 允许受权人删除用户
允许受权人执行过程或函数 独立的或打包的 或引用任何模块中的全
EXECUTE ANY PROCEDURE
局变量
GRANT ANY PRIVILEGE 使受权人具有全部系统特权
GRANT ANY ROLE 使受权人具有全部数据库角色
INSERT ANY TABLE 允许受权人在任何模块的表或视图中插入行
LOCK ANY TABLE 允许受权人锁定任何模块中的表和视定
SELECT ANY SEQUENCE 允许受权人引用其它模块中的序列
SELECT ANY TABLE 允许受权人查询任何模块中的表 视图或进行映像
UPDATE ANY ROWS 允许受权人更新表中的行
对象权限是指可以在数据库中使用的对象的权限 表 12。2 中给出了所有了 ORACLE
中的对象权限
245
…………………………………………………………Page 246……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
ALL 你可以使用下边的 GRANT 语句来对其它用户授权访问你的表
ALTER SYNTAX
DELETE
GRANT {object_priv | ALL 'PRIVILEGES'} ' (column
EXECUTE
'; column'。。。) '
INDEX
INSERT '; {object_priv | ALL 'PRIVILEGES'} ' (column
REFERENCES '; column' 。。。) ' ' 。。。
SELECT
ON 'schema。'object
UPDATE
TO {user | role | PUBLIC} '; {user | role | PUBLIC}' 。。。
'WITH GRANT OPTION'
如果你想取消对某个对象对于某人的授权 你可以使用 REVOKE 语句 语法如下
SYNTAX
REVOKE {object_priv | ALL 'PRIVILEGES'}
'; {object_priv | ALL 'PRIVILEGES'} '
ON 'schema。'object
FROM {user | role | PUBLIC} '; {user | role | PUBLIC}'
'CASCADE CONSTRAINTS'
从建表到角色授权
创建一个名字为 SALARIES 的表 结构如下
INPUT
SQL》 CREATE TABLE SALARIES (
2 NAME CHAR(30);
3 SALARY NUMBER;
4 AGE NUMBER);
OUTPUT
Table created。
现在 来创建两个用户 Jack 的Jill
INPUT/OUTPUT
SQL》 create user Jack identified by Jack
246
…………………………………………………………Page 247……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
User created。
SQL》 create user Jill identified by Jill
User created。
SQL》 grant connect to Jack
Grant succeeded。
SQL》 grant resource to Jill
Grant succeeded。
分析
到现在为止 你已经创建了两个用户 并且为每个用户分了不同的角色 因此 当他
们在数据库中进行工作时有着不同的能力 在最初创建的表中有如下内容
INPUT/OUTPUT
SQL》 SELECT * FROM SALARIES;
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 61000 55
在本例中你可以按着自己的意愿为该表分配不同的权限 我们假定你具有 DBA 角色
因而具有系统中的一切权利 即使你不是 DBA 角色 你仍然可以对 SALARIES 表进行对
象授权 因为你是它的所有者
由于JACK 的角色了 Connect 所以你只想让他有使用 SELECT 语句的权利
INPUT/OUTPUT
SQL》 GRANT SELECT ON SALARIES TO JACK
Grant succeeded。
因为 JILL 的角色为 Resource 你允许他对表进行选择和插入一些数据 或是严格一些
允许 JILL 修改 SALARIES 表中 SALARY 字段的值
INPUT/OUTPUT
SQL》 GRANT SELECT; UPDATE(SALARY) ON SALARIES TO Jill
Grant succeeded。
现在表和用户都已经创建了 你需要看一下创建的用户在访问表时的不同之处 JACK
和 JILL 都有对 SALARIES 表执行 SELECT 的权限 可是 如果是 JACK 访问表 他可能
会被告知该表不存在 因为 ORACLE 的表名之前需要知道表所有的的用户名或计划名
247
…………………………………………………………Page 248……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
使用表时的限制
这里需要说明一下 你在创建表的时候所使用的用户名假定为 Byran 当 JACK 想从
SALARIES 表中选择数据库 他必须使用该用户名
INPUT
SQL》 SELECT * FROM SALARIES
OUTPUT
ERROR at line 1:
ORA…00942: table or view does not exist
这里 JACK 被告知该表并不存在 现在对表使用用户名来加以标识
INPUT/OUTPUT
SQL》 SELECT * FROM Bryan。SALARIES
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 61000 55
分析
你可以看到现在查询已经工作了 现在我们再来测试一下 JILL 的访问权限 退出 JACK
的登录并以 JILL 的身份登录
INPUT/OUTPUT
SQL》 SELECT * FROM Bryan。SALARIES
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 61000 55
工作正常 现在试着向表中插入一个新的记录
INPUT/OUTPUT
SQL》 INSERT INTO Bryan。SALARIES VALUES('JOE';85000;38)
ERROR at line 1:
ORA…01031: insufficient privileges
分析
248
…………………………………………………………Page 249……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
该操作并没有被执行 因为 JILL 没有在 SALARIES 表中使用 INSERT 语句的权限
INPUT/OUTPUT
SQL》 UPDATE Bryan。SALARIES SET AGE = 42 WHERE NAME = 'JOHN'
ERROR at line 1:
ORA…01031: insufficient privileges
分析
还是不能执行 JILL 只能做他权利范围之内的事情 事实上 ORACLE 非常快地捕捉
到了错误并返馈给了她
INPUT/OUTPUT
SQL》 UPDATE Bryan。SALARIES SET SALARY = 35000 WHERE NAME = 'JOHN'
1 row updated。
SQL》 SELECT * FROM Bryan。SALARIES
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 35000 55
分析
你看到了 JILL 可以进行她所有权限范围内的更新工作
为安全的目的而使用视图
我们在第十天的 创建视图和索引 中曾经提到过视图其实是一种虚表 它可以为用
户提供一种以真实的数据并不相同的显示方式 今天 我们将学习更多的使用视图来实现
安全性的方法 但是 首先 我们需要解释一下视图为什么可以让 SQL 的语句简单化
在早些时候我们曾经学过当一个用户访问一个不为他所有的表的时候 目标必须引用
它所属用户的名字方可正常访问 就像你所想的一样 当你将多个 SQL 语句写在一行时它
将会变得非常的冗长 更重要的是 初学者在可以查看表的内容之前要先知道表的所属用
户名 这并不是你想让你的用户做的工作 下边给出了一个非常简单的解决方案
249
…………………………………………………………Page 250……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
使用表或视图时限制的解决方法
假如你是以 JACK 的身份登录进行系统的 你从早些时候的内容中了解到如果你想查
看表中的内容 你必须使用下边的语句
INPUT
SQL》 SELECT * FROM Bryan。SALARIES
OUTPUT
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 35000 55
如果你创建了一个名字叫 SELECT_VIEW 和视图 那么用户可以非常简单地使用这个
视图
INPUT/OUTPUT
SQL》 CREATE VIEW SALARY_VIEW AS SELECT * FROM Bryan。SALARIES
View created。
SQL》 SELECT * FROM SALARY_VIEW
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 35000
分析
上边的查询返回的结果与使用用户名的返回结果是相同的
用同义词取代视图
SQL 还提供了一种叫同义词的对象 同义词可以为表提供一个别名以将击键的次数减
到最小 同义词有两种 公
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!