SQL 21日自学通(V3.0)(PDF格式)-第51部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
间及配额 你可以在 ORACLE 的附带文档中学习到更多的与之相关的内容
与你在本书中学到的其它的 CREATE 语句一样 它也有 ALTER USER 命令 其语法
格式如下
语法
ALTER USER user
'IDENTIFIED {BY password | EXTERNALLY}'
'DEFAULT TABLESPACE tablespace'
'TEMPORARY TABLESPACE tablespace'
'QUOTA {integer 'K|M' | UNLIMITED} ON tablespace'
'PROFILE profile'
'DEFAULT ROLE { role '; role' 。。。
| ALL 'EXCEPT role '; role' 。。。' | NONE}'
你可以使用该命令来改变所有的用户选项 包括密码和配置文件 例如 如果想改变
Bryan 的密码 你可以用下边的语句
INPUT/OUTPUT
SQL》 ALTER USER Bryan
2 IDENTIFIED BY ROSEBUD
User altered
如果想改变默认的表空间 可以用下边的语句
INPUT/OUTPUT
SQL》 ALTER USER RON
241
…………………………………………………………Page 242……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
2 DEFAULT TABLESPACE USERS
User altered。
如果想删除一个用户 只需简单地使用 DROP USER 命令即可 它将会把用户从数据
库的清除 该命令的语法格式如下
SYNTAX
DROP USER user_name 'CASCADE'
如果你使用了 CASCADE 选项 那么所有与用户账号相关的对象也将会被删除 否则
的话对象将仍归该用户所有 但是用户将不再有效 这有点让人迷糊 但是当你只想删除
用户时它很有用
创建角色
角色是允许用户在数据库中执行特定功能的一个或一组权限 将角色应用于用户的语
法如下
SYNTAX
GRANT role TO user 'WITH ADMIN OPTION'
如果你使用了 WITH ADMIN OPTION 选项 那么该用户可以为其它用户赋予权限
功能是不是很强大
如果想删除角色 可以使用 REVOKE 命令
SYNTAX
REVOKE role FROM user
当你使用你早些时候创建的账号登录进入系统时 你会为你的许可权问题而费尽精力
你可以登录进入 但这也是你所能做的全部内容 ORACLE 可以让你用下边的三个角色之
一进行注册
l Connect
l Resource
l DBA 也就是数据库管理员
这三个角色有着不同程度的权限
注 如果你有适当的权限 你可以创建你自己的角色 为你的角色赋予权限 然后将角色
应用于你的用户以取得更高的安全性
242
…………………………………………………………Page 243……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Connect 角色
你可以将 Connect 角色理解为登录级角色 被赋予该角色的用户可以登录进入系统并
做允许他/她们做的工作
INPUT/OUTPUT
SQL》 GRANT CONNECT TO Bryan
Grant succeeded。
Connect 角色允许用户从表中插入 更新 删除属于其它用户的记录 在取得了适当
的许可权限以后 用户也可以创建表 视图 序列 簇和同义词
Resource 角色
该角色允许用户对 ORACLE 数据库进行更多的访问 除了可以赋予 Connect 角色的权
限以外 它还有创建过程 触发机制和索引的权限
INPUT/OUTPUT
SQL》 GRANT RESOURCE TO Bryan
Grant succeeded。
DBA 角色
DBA 角色包括了所有的权限 赋予了该角色的用户可以在数据库中做他们想做的任何
事 为了保证系统的完整性你应该将具有该角色的用户数量保持在仅有的少数几个上
INPUT/OUTPUT
SQL》 GRANT DBA TO Bryan;
Grant succeeded。
在经过了这三步之后 用户 Bryan 分别应用了 connect resource 和 DBA 角色 这似乎
是多余的 因为 DBA 角色就包括了其它的两个角色 所有现在我们可以把它删除掉
INPUT/OUTPUT
SQL》 REVOKE CONNECT FROM Bryan
Revoke succeeded。
SQL》 REVOKE RESOURCE FROM Bryan
Revoke succeeded。
243
…………………………………………………………Page 244……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
拥有 DBA 角色的 Bryan 现在可以做他想做的任何工作
用户权限
在你决定好对你的用户应用何种角色以后 你需要决定让你的用户具有使用哪种数据
库对象的权利 ORACLE 中称之为许可权限 该权限依据你为用户所定的角色的不同而不
同 如果你创建了一个对象 你可以将该对象的许可权赋予其它的用户以使他们也具有访
问权 ORACLE 定义了两种可以赋予用户的权利 — — 系统许可权与对象许可权 见表 12。1
和表 12。2
系统许可权应用于整个系统 赋予系统许可权的语法如下
SYNTAX
GRANT system_privilege TO {user_name | role | PUBLIC}
'WITH ADMIN OPTION'
如果使用了 WITH ADMIN OPTION 选项就允许拥有该权限的人将该权限应用给其它
的用户
用户使用视图的权利
下边的命令将允许系统中的所有用户都具有在自己的模块中创建视图和访问视图的能
力
INPUT
SQL》 GRANT CREATE VIEW TO PUBLIC
OUTPUT
Grant succeeded。
分析
PUBLIC 关键字的意思就是每个人都有创建视图的权利 很明显 系统权限允许受权
人访问几乎全部的系统的设置 所有系统权限只应只能给予特定的人或需要使用系统权限
的人 表 12。1 显示出了你可以在 ORACLE 7 的帮助文件中找到的系统权限
警告 当赋予权限给 PUBLIC 时必须小心 它可能会给所有用户以访问数据库的权限 尽
管有一些人你是不想让他拥有这一权限的
244
…………………………………………………………Page 245……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
表 12。1 在 ORACLE 7 中的系统权限
System Privilege Operations Permitted
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 (