按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
使用表或视图时限制的解决方法
假如你是以 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 还提供了一种叫同义词的对象 同义词可以为表提供一个别名以将击键的次数减
到最小 同义词有两种 公有的和私有的 任何一个具有 Resource 角色的用户都可以创建
私有类型的同义词 与之相对应的是只有 DBA 角色的用户才能够创建公有类型的同义词
创建公有类型的同义词的语法如下
SYNTAX
CREATE 'PUBLIC' SYNONYM 'schema。'synonym FOR 'schema。'object'@dblink'
250
…………………………………………………………Page 251……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
针对前一个例子 你可以使用下边的语句来取得相同的效果
INPUT/OUTPUT
SQL》 CREATE PUBLIC SYNONYM SALARY FOR SALARIES
Synonym created。
然后再以 JACK 的身份登录并输入
INPUT/OUTPUT
SQL》 SELECT * FROM SALARY
NAME SALARY AGE
JACK 35000 29
JILL 48000 42
JOHN 35000 55
使用视图来解决安全问题
假定你现在又改变主意了 你不想让 JACK 和 JILL 看到 SALARIES 表的全部内容
你可以使用视图来达到只使他们看到属于他们自己的信息这一目的
INPUT/OUTPUT
SQL》 CREATE VIEW JACK_SALARY AS
2 SELECT * FROM BRYAN。SALARIES
3 WHERE NAME = 'JACK';
View created。
INPUT/OUTPUT
SQL》 CREATE VIEW JILL_SALARY AS
2 SELECT * FROM BRYAN。SALARIES
3 WHERE NAME = 'JILL';
View created。
INPUT/OUTPUT
SQL》 GRANT SELECT ON JACK_SALARY TO JACK
Grant succeeded。
INPUT/OUTPUT
SQL》 GRANT SELECT ON JILL_SALARY TO JILL
251
…………………………………………………………Page 252……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Grant succeeded。
INPUT/OUTPUT
SQL》 REVOKE SELECT ON SALARIES FROM JACK
Revoke succeeded。
INPUT/OUTPUT
SQL》 REVOKE SELECT ON SALARIES FROM JILL
Revoke succeeded。
现在 以JACK 的身份登录并测试你为他创建的视图
INPUT/OUTPUT
SQL》 SELECT * FROM Bryan。JACK_SALARY
NAME SALARY AGE
Jack 35000 29
INPUT/OUTPUT
SQL》 SELECT * FROM PERKINS。SALARIES
ERROR at line 1:
ORA…00942: table or view does not exist
退出 JACK 登录并以 JILL 身份登录来测试 JILL
INPUT/OUTPUT
SQL》 SELECT * FROM Bryan。JILL_SALARY
NAME SALARY AGE
Jill 48000 42
ANALYSIS
你可以看到对 SALARIES 表的访问将完全受到视图的控制 SQL 允许你创建这些视图
并把它提供给你的用户 这项技术为你提供了相当大的灵活性
删除同义词的语法如下
SYNTAX
SQL》 drop 'public' synonym synonym_name
注 到现在为止 你应该明白保持有 DBA 角色的用户最少的重要性了吧 因为具有这一
角色的用户可以运行数据库中的任何命令及操作 但是请注意 在 ORACLE 和 Sybase
中你只有成为 DBA 角色的用户才可以从数据库中引入或导出数据
252
…………………………………………………………Page 253……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
使用 WITH GRANT OPTION 子句
如果 JILL 想把她的 UPDATE 权限赋给 JACK 时需要谁来完成这项工作 最初你可能
会认为应该由 JILL 来完成 因为她有 UPDATE 权限 她应该可以为其他用户受予这个权
限 但是 如果你使用早些时候的 GRANT 语句 JILL 并不能为其他用户授权
SQL》 GRANT SELECT; UPDATE(SALARY) ON Bryan。SALARIES TO Jill
下边是我们在今天早些时候讲过的 GRANT 语句的语法
SYNTAX
GRANT {object_priv | ALL 'PRIVILEGES'} ' (column '; column'。。。) '
'; {object_priv | ALL 'PRIVILEGES'} ' (column'; column' 。。。) ' ' 。。。
ON 'schema。'object TO {user | role | PUBLIC} '; {user | role | PUBLIC}' 。。。
'WITH GRANT OPTION'
看到在末尾的 WITH GRANT OPTION 语句了吗 当在给对象授权时如果使用了这个
选项 那么该权限就可以被传给其他的用户 所以 如果你想让 JILL 具有给 JACK 授权的
能力 那么你应该像下边这样使用 GRANT 语句
INPUT
SQL》 GRANT SELECT; UPDATE(SALARY)
2 ON Bryan。SALARIES TO JILL
3 WITH GRANT OPTION
OUTPUT
Grant succeeded。
当以 JILL 的身份登录时就可以使用下边的语句
INPUT/OUTPUT
SQL》 GRANT SELECT; UPDATE(SALARY) ON Bryan。SALARIES TO JACK
Grant succeeded。
总结