按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
并把它提供给你的用户 这项技术为你提供了相当大的灵活性
删除同义词的语法如下
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。
总结
如果数据库的管理人员如果对数据库的安全考虑不周常常会导致许多问题 幸运的是
SQL 提供了几个非常有用的命令来实现数据库的安全性
253
…………………………………………………………Page 254……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
用户最初可由 CREATE USER 命令来创建 这里可以设定用户名和密码 当用户的帐
号生效以后 必须为其指定角色以使其可以工作 在 ORACLE 中有三种可用的角色 分别
了 Connect Resource 和 DBA 角色 每种角色有不同的访问数据库的资格 Connect 最少
而 DBA 则拥有全部的访问能力
GRANT 命名可以对用户进行授权 REVOKE 命令则可以取消对用户的授权 权限可
分为对象权限和系统权限 系统权限应该严格控制 不能授予没有使用经验的用户 如果
他们得到了这种权限他们就可能 也许是不经意之间 毁坏你辛苦构建的数据库 对象权
限则可以让用户具有访问个别的由已存在用户所创建的模块中的对象的能力
所有的这些技术和语句都为 SQL 的用户提供了相当广泛的用以设置安全性的工具 尽
管我们讨论的主要是 ORACLE 7 的安全特性 但是你可以在设计你自己的数据库时用到这
些信息 切记不论你使用哪一种数据库产品 它都提供了一定程度的安全性
问与答
问 我知道安全性是需要的 但是否 ORACLE 做的太多了
答 不 一点也不多 尤其是当在大型的多用户应用场合时更是这样 由于使用数据库的
不同用户所做的工作也并不相同 所以你需要限制用户让他们能做什么或不能做什么 用
户应该只能进行他所处角色和权限许可内的工作
问 看来 DBA 用户在创建我的帐号时已经知道了我的密码 是否是这样 这是一个安全
问题
答 确实是这样 DBA 创建了你的用户和密码 所以你应该在收到创建信息以后立即使用
ALTER USER 命令来更改 ID 和密码
校练场
1 下边的语句是否是错误的
SQL》 GRANT CONNECTION TO DAVID
2 对与错 当删除用户时所有属于用户对对象都会随之删除
3 如果你创建了一个表并对它使用了 SELECT 权限对象为 PUBLC 时会有什么问题
4 下边的 SQL 语句是否正确
SQL》 create user RON identified by RON
254
…………………………………………………………Page 255……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
5 下边的 SQL 语句是否正确
SQL》 alter RON identified by RON
6 下边的 SQL 语句是否正确
SQL》 grant connect; resource to RON
7 如果表为你所有 别人如何才能从表中选择数据
练习
作为数据库安全性的练习 请你创建一个表 然后再创建一个用户 为该用户设置不
同的安全性并测试
255
…………………………………………………………Page 256……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第 13 天 高级 SQL
目标
在之前的 12 天中 我们学习了许多关于如何写出强在的 SQL 查询以从数据库中获得
数据 我们也简要的学习了如何进行数据库的设计以数据库安全性问题 而在今天的高级
SQL 部分 我们将主要学习以下内容
l 临时表
l 游标
l 存贮过程
l 触发机制
l 内嵌 SQL
注 在今天的例子中我们使用 ORACLE 的 PL/SQL 和 MicroSoft SQL Server 的 Transact…SQL
来实现 我们尽可能使我们的例子可以适用于这两种风格的 SQL 你不必为此需要得
到一个 ORACLE 或 SQL Server 的副本 实际的数据库版本的选择是依据你的需要而定
的 如果你已经阅读了足够的可以创建一个项目所需要的知识 那你是没有选择的机
会的
注 尽管你可以在大多数的数据库产品上应用本书中所给出的例子 但是今天的内容
并不适用于这句话 许多数据库供应商仍没有提供临时表 存贮过程以及触发机制 请检
查你的数据库文档 看你所喜爱的数据库系统是否支持这些特性
临时表
我们要讨论的第一个高级主题是临时表的用法 这是一种简单的临时存在于数据库系
统当中的表格 当结束数据库的联接或退出登录以后它们会被自动地删除 Transact…SQL 在
TempDB 中创建临时表 这个数据库是在你安装 SQL…SERVER 时创建的 创建临时表可以
使用两种语法格式
SYNTAX
SYNTAX 1
256
…………………………………………………………Page 257……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
create table #table_name (field1 datatype;
。
。
。
fieldn datatype
语法 1 用以在 TempDB 中创建一个表 该表由 Create Table 命令以及创建表时的日期
和时间组合而成一个唯一的表名 临时表只可由它的创建者使用 五十个用户可以在同时
运行下边的命令
1》 create table #albums (
2》 artist char(30);
3》 album_name char(50);
4》 media_type int)
5》 go
表名开头的#标志是 SQL 用以标识临时表的标志 五十个用户中每一个都可以获得一
个他可以使用的表 每一个用户都可以放心地插入 更新 删除表中的数据而不必担心其
它的用户使该表中的数据失效 该表也可以使用下边的命令来手动删除
1》 drop table #albums
2》 go
当用户退出 SQL…SERVER 时该表也可以被自动地删除 如果你是在自态 SQL 联接情
况下使用该语句 例如 SQL…SERVER 的 DB…LIBRARY 那么当动态联接被终止时该表也
会被自动地删除
语法 2 给出了另一种在 SQL…SERVER 中创建临时表的方法 该语法与使用语法 1 有着
不同的结果 所以你要注意这两种语法之间的差别
SYNTAX
SYNTAX 2:
create table tempdb。。tablename (field1 datatype;
。
fieldn datatype)
使