目录
1、用户
- 创建用户:
- 在数据库中建立用户,就要使用到 create user 语句:
create user user_name identified by password [default tablespace def_tabspace] [temporary tablespace temp_tabspace] · def_tabspace 指定存储对象使用的默认表空间;这些对象包括表。如果此处忽略了默认的表空间,就默认使 用system表空间,这个表空间在所有的数据库中都存在。 ****注意:数据库使用表空间来分隔对象。 · tmp_tabspace 指定保存临时对象所使用的的默认表空间。这些对象包括临时表;如果在此处忽略了临时表空 间,就默认使用system表空间。 price: connect system/manager create user jason identified by price ; ***注意: 想要运行这些例子,需要以一个特权用户的身份连接到数据库中。 create user henry identified by hooray default tablespace users temporary tablespace temp ;
**在此处,如果不知道自己数据库的表空间的话,可以使用下面的语句查询:
select * from dba_tablespaces ; **特权用户才能够执行
-
新建立的用户是没有任何的权限的,如果需要用新用户进行操作的话就需要授予新用户相应的权限。例如,如果需要连接到数据库的话就需要为新用户授予“连接数据库”的权限,或者授予“创建会话”的权限。
--授予创建会话的权限 grant create session to jason ; --授予连接数据库的权限 grant connect to jason ;
-
创建另外两个用户,方便接下来的演示:
create user steve indentified by button ; create user gail identified by seymour ; grant create session to steve,gail ;
- 在数据库中建立用户,就要使用到 create user 语句:
- 修改用户密码
- 用户的密码可以使用 alter user 语句进行修改,前提是登录的用户为特权用户:
alter user jason identified by marcus ; **只有特权用户才可以对创建的普通用户进行密码的修改
-
password命令可以用来修改当前登录着的用户的密码,在数如password命令之后,如下:
SQL> password 更改 TEST 的口令 旧口令: 新口令: 重新键入新口令: 口令已更改 SQL>
- 用户的密码可以使用 alter user 语句进行修改,前提是登录的用户为特权用户:
- 删除用户
- 删除用户的时候使用下面的命令,只有特权用户才能够对普通用户进行删除操作:
drop user user_name ; example:删除用户jason drop user jason ; **注意**: 如果删除的用户模式中包含对象(例如表等等),就必须在drop user语句中在要删除的用户名后面加上关键字cascade。
- 删除用户的时候使用下面的命令,只有特权用户才能够对普通用户进行删除操作:
2、系统特权
- 向用户授予系统特权
- 系统特权(system privilege)允许用户在数据库执行特定的操作,比如执行DDL语句。常用的系统特权如下表:
表2-1 常用的系统特权表 create session 连接到数据库 create sequence 创建序列 create synonym 创建同名对象。同名对象用于引用其他模式中的表 create table 创建表 create any table 在任何模式中创建表 drop table 删除表 drop any table 删除任何模式中的表 create procedure 常见存储过程 execute any procedure 执行任何模式中的存储过程 create user 创建用户 drop user 删除用户 create view 创建视图。视图是存储的查询,可以用来对多个表和多列进行访问,然后就可以想查询表一样查询视图。 -
授予用户系统权限的语法如下:
grant 想要授予的权限 to user ;
- 向steve用户授予create session,create user,create table 的权限:
-
grant create session,create table,create user to steve ;
**注意**
此处也可以使用 with admin option 选项,这样所授权的用户就可以把这种特权在授予其他用户。下面的这个例子将 execute any procedure 权限授予 steve 用户,同时制定了 with admin option选项: grant execute any procedure to steve with admin option ; 然后 steve 就可以将 execute any procedure 授予其他的用户了。下面以steve用户的身份连接到Oracle数据库上,并将 execute any procedure 权限授予 gail 用户: connect steve/button ; grant execute any procedure to gail ;
-
将一种系统特权授予PUBLIC,可以将该特权授予所有的用户。下面以system身份连接到是数据库上,并将 execute any procedure特权你授予public:
connect system/manager ; grant execute any procedure to punblic ; 现在数据库的所有的用户都具有execute any procedure特权了。
-
- 系统特权(system privilege)允许用户在数据库执行特定的操作,比如执行DDL语句。常用的系统特权如下表:
- 检查授予用户的系统特权
- 通过查询 user_sys_privs 可以检查某个用户具有哪些系统特权。
表2.2 user_sys_privs 的部分列 列 类型 说明 username varchar2(30) 当前用户的姓名 privilege varchar2(40) 系统特权 admin_option varchar2(3) 该用户是否能够将这种特权授予其他的用户 SQL> select * from user_sys_privs ; USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --- STEVE CREATE SYNONYM NO STEVE CREATE SESSION NO STEVE UNLIMITED TABLESPACE NO PUBLIC EXECUTE ANY PROCEDURE NO STEVE CREATE TABLE NO STEVE CREATE USER NO 已选择6行。
- 通过查询 user_sys_privs 可以检查某个用户具有哪些系统特权。
- 使用系统特权
- 系统用户被授予特权之后,就可以使用这种特权来执行特定的任务。例如steve具有create user的特权,因此可以创建用户。
- 撤销用户的系统特权
- 可以使用 revoke 语句撤销某个用户的系统特权。下面这个例子以system用户的身份连接到数据库,并撤销 steve 用户的 create table 特权:
connect system/manager ; revoke create table from steve ; --下面的这个例子撤销 steve 用户的 execute any procedure 的系统特权: revoke execute any procedure from steve ;
- 可以使用 revoke 语句撤销某个用户的系统特权。下面这个例子以system用户的身份连接到数据库,并撤销 steve 用户的 create table 特权:
3、对象特权
- 向用户授予对象特权
- 对象特权(Object privilege)允许用户对数据库对象执行特定的操作,比如对表执行DML语句。例如,insert on store.products 特权就可以允许用户向store模式的products表中插入行。
表3-1 常用的对象特权 对象特权 允许执行的操作 SELECT 允许执行查询操作 INSERT UPDATE DELETE EXECUTE 执行存储过程
- 对象特权(Object privilege)允许用户对数据库对象执行特定的操作,比如对表执行DML语句。例如,insert on store.products 特权就可以允许用户向store模式的products表中插入行。
- 对象特权授予
- 可以使用 grant 语句向用户授予对象特权。
connect store/store_passsword ; grant select,update,insert on store.products to steve ; grant select on store.employees to steve; --上述以 store 的身份连接到数据库,并向 steve 用户授予以下的特权:对products表的select、---- --update、insert对象特权,以及对employees表的select特权。
**下面的这个例子将对 last_name 和 salary 列的 update 特权授予 steve 用户:
grant update(last_name,salary) on store.products to steve ; **采用这种授权的方式的时候只能单独对 update 进行授权,不能和别的对象特权一起授予,否则会失效。
**此处也可以使用 grant 选项,这样授权的用户就可以把这种特权在授予别的用户
connect store/store_password ; grant select on store.customers to steve with grant option ;
**注意:当希望所授权的用户可以将对象特权授予其他用户时,使用 grant 选项;当希望所授权用户将系统特权授予其他用户时,使用admin选项。
- 可以使用 grant 语句向用户授予对象特权。
- 检查已授予的对象特权
- 通过查询 user_tab_privs_made 可以检查某个用户对哪些表向其他表开放了哪些对象特权。
select * from user_tab_privs_made ; --检查的是所登录的用户的
-
通过查询 user_col_privs_made 可以检查某个用户对那些列对象开放了哪些特权。
select * from user_col_privs_made ;
表3-2 user_col_privs_made 的部分列 列 说明 grantee 该特权所授予的用户 table_name 所授予的特权所操作的对象名 column_name 所授予的特权所操作的对象名 grantor 授权者 privilege 对该对象所授予的特权 grantable 特权所授予的用户是否可以将这种特权在授予其它的用户。该值等于yes或者no
- 通过查询 user_tab_privs_made 可以检查某个用户对哪些表向其他表开放了哪些对象特权。
- 检查以接受的对象特权
- 通过查询user_tab_privs_recd可以检查某个用户被授予哪些表上的对象特权。
- 通过查询user_col_privs_recd可以检查某个用户被授予了那些列的对象特权。
- 使用对象特权
- 被授予相应的对象特权之后,就可以使用对象特权执行特定的任务了 。
- 同名对象
- 在上一节的例子中,可以通过指定一个模式名后面跟上一个表名来访问其他模式中的表。例如,当steve用户对store模式中customers表进行检索时,就要岁store.customers执行select语句。为表创建同名对象(synonym)之后就可以不用再输入模式名了,同名对象是使用 create synonm 语句创建。
1、首先以system用户的身份连接到数据库中,并将 create synonym系统特权授予 steve 用户: connect system/manager ; grant create synonym to steve ; 2、然后以steve用户的身份连接到数据库上,并执行一条 create synonym 语句,为 store.customers 表创建一个同名对象: connect steve/123456 ; create synonym customers for store.customers ; 3、要对 store.customers 对象进行检索,steve 用户的只需要执行: select * from customers ;
- 在上一节的例子中,可以通过指定一个模式名后面跟上一个表名来访问其他模式中的表。例如,当steve用户对store模式中customers表进行检索时,就要岁store.customers执行select语句。为表创建同名对象(synonym)之后就可以不用再输入模式名了,同名对象是使用 create synonm 语句创建。
- 公共同名对象
- 创建公共同名对象(public synonym)。在创建公共同名对象之后,所有的用户都可以看到这个同名对象。
1、以system用户身份连接到数据库上, connect system/manager ; 2、将create public synonym系统特权授予store用户 grant create public synonym to store ; 3、以store用户的身份连接到数据库上 connect store/store_password ; 4、为 store.products 创建一个公共同名对象 products 。 create public synonym products for store.products ;
**即使已经为 store.products 创建了公共同名对象,用户仍然需要具有对该表的对象特权才能真正对该表进行访问。
-
如果用户具有其他对象特权,那么这个用户就可以通过同名对象来使用这些对象特权。例如,如果 gail 对 store.products 表具有 insert特权,那么gail就可以通过同名对象 products 向 store.products 添加行。
- 创建公共同名对象(public synonym)。在创建公共同名对象之后,所有的用户都可以看到这个同名对象。
- 撤销用户的对象特权
- 可与使用 revoke 语句撤销某个用的对象特权。下面这个例子以store用户的身份连接到数据库上,并撤销 steve 用户对 products 表的 insert 特权:
connect store/store_password ; revoke insert on products from steve ; 下面的这个例子撤销steve用户对 customers 表的 select 特权: revoke select on store.customers from steve ; 在撤销steve用户的select on store.customers特权时---steve已经将这种特权由授予了gail----gail也同时失去了这种特权。
- 可与使用 revoke 语句撤销某个用的对象特权。下面这个例子以store用户的身份连接到数据库上,并撤销 steve 用户对 products 表的 insert 特权:
4、角色
角色(role)就是一组特权,它可以分配给一个用户或者其他角色。角色的优点可以总结为如下几点:
1)特权不是每次一个直接授予一个用户;而是先创建角色,向该角色授予一些特权,然后再将该角色授予多个用户或其他角色。
2)在增加或者删除一个角色的某种特权时,被授予该角色的所有用户和角色都会自动获得新加的特权或者自动失去这种特权。
3)可以将多个角色授予一个用户或者角色。
4)可以为角色设置密码
- 创建角色
- 要创建角色,必须具备 create role 特权。下面的这个例子,store用户被授予带有 with admin option 选项的 create user 系统特权。
1、以system用户的身份连接到数据库上: connect system/manager ; 2、授予 store 用户创建角色的权限: grant create role to store ; 3、授予 store 用户带有 with admin option 选项的create role系统特权: grant create user to store with admin option ;
-
下表中列出了将要创建的角色:
要创建的角色 角色名 具有的权限 product_manager 对product_types和products标执行select,insert,update和delete操作 hr_manager 对salary_grades和employees表执行select,insert,update和delete操作。hr_manager还可以创建用户 overall_manager 对前面两个角色涉及到的所有的标执行select、insert、update和delete操作,overall_manager会被授予以上两个角色 1、连接到system用户上 connect store/store_password ; 2、创建角色product_manager: create role product_manager ; 3、创建角色hr_manager: create role hr_manager ; 4、创建角色overall_manager: create role overall_manager identified by manager_password ;
-
- 要创建角色,必须具备 create role 特权。下面的这个例子,store用户被授予带有 with admin option 选项的 create user 系统特权。
- 为角色授权
- grant 语句可以用来将特权授予角色:
grant select,insert,update,delete on product_types to product_manager ; grant select,insert,update,delete on propducts to product_manager ; grant select,insert,update,delete on salary_grades to hr_manager ; grant create user to hr_manager ; grant product_manager,hr_manager to overall_manager ;
- grant 语句可以用来将特权授予角色:
- 将角色授予用户
-
grant ovarall_manager to steve ;
-
- 检查授予用户的角色
- 通过查询 user_role_privs 可以检查已经授予了一个用户哪些角色。
- 检查授予角色的系统特权
- 通过查询 role_sys_privs 可以检查已经授予了一个角色哪些系统特权。
- 检查授予角色的对象特权
- 通过检查 role_tab_privs可以检查已经授予一个角色哪些对象特权。
- 使用授予角色的特权
- 默认角色
- 撤销角色
- revoke语句可以用来撤销角色
connect store/store_password ; revoke overall_manager from steve ;
- revoke语句可以用来撤销角色
- 从角色中撤销特权
- revoke可以用来从角色中撤销某种特权
revoke all on product_types from product_manager ; revoke all on products from product_manager ;
- revoke可以用来从角色中撤销某种特权
- 删除角色
- drop role 可以用来删除角色:
drop role overall_manager ; drop role product_manager ; drop role hr_manager ;
- drop role 可以用来删除角色: