Oracle用户管理机制
Oracle通过管理员用户例如sys和system通过分配权限与角色来管理普通用户。
权限分为系统权限和对象权限两种。
系统权限:规定用户使用系统的权限,也就是和数据库管理的相关权限。
系统权限大概有200多种,大多数都是影响数据字典的操作(创建表或者用户),其他的影响数据库和实例,例如创建表空间,调整实例参数值等,或者是创建会话常见的权限:1. create session 创建会话 只有有这个权限才能连接2. restricted session 受限制的会话(假如使用startup restrict或者alter system enable restricted session进行调整的话,那么只有这个权限的用户才能够连接)3. alter database 更改数据库,允许访问多个修改物理结构所需的命令4. alter system 更改系统,允许控制实例参数和内存结构5. create tablespace6. create table 注意,7. grant any object privilege 授予任何对象权限:允许被授权人将其本身不拥有的对象的对象权授予他人,但是不能授予自己8. create any table :能够创建属于其他用户的表9. drop any table :能删除其他用户的表9. insert any table,update any table,delete any table :能够DML其他用户的表10. select any table :被授权人能够对数据库中的任何表执行select操作
对象权限:规定用户对数据库对象(表或试图)的访问,例如增、删、查、改等。
角色分为预定义角色和自定义角色两种。
预定义角色:Oracle预先把常用的权限集中起来,定义好的角色。
自定义角色:自己定义的角色。
问题1:首用户先创建一个test用户,密码也为test。
create user user_name identified by password;
因为实在CDB环境下,所以用户名开头加上C##,即现在用户名为C##test.
Oracle12c的账户分为公用账户和本地账户,公用账户实在CBD下创建的,即账户名必须以C##开头,并且可以给所有的PDB用户使用。本地用户只能在PDB中创建账户,本地账户不能以C##开头。
问题2:登录C##test用户
conn user_name/password
问题3,:为什么刚创建的用户不能登录?
因为刚创建的用户没有任何的权限,需要管理员给用户分配相应的权限,
grant create session to user_name.
问题4:在当前的用户下,给用户C##test修改密码
password user_name;
问题5:在管理员用户下,给用户C##test修改密码
alter user user_name identified by password;
问题6:给用户C##test分配相应的角色
grant connect to C##test;
grant resource to C##test;
问题7:在用户下创建表tb,并且对表做出相应的操作。
此时如上图可知,该用户对表空间users没有相应的权限,所以不能对表tb做出插入操作,此时我们会疑惑表空间users从哪里来的呢?
在创建用户时的完整语句为:
create user user_name identified by password /user_name为用户名 password为密码
default tablespace users /默认表为空间users
temporary tablespace temp /临时表空间为temp
quto 3M on users; /限制用户创建的表不能超过3M
我们可以了解到当我们创建C##test用户时,系统会创建默认的表空间为users,而对用户没有相应的权限,我们可以通过管理员给用户分配相应的权限,此时我们就可以操作了。
Oracle中与表空间有关的系统权限。
create tablespace 允许用户创建表空间。
alter tablespace 允许用户修改表空间的属性。
drop tablespace 允许用户删除表空间。
manage tablespace 允许用户更改表空间的状态,包括online,offline,begin backup和end backup。
unlimited tablespace 允许用户无限度使用表空间。
问题8:在用户下删除表tb,并且回收用户C##test的相应权限。
删除表:sql>drop tabel table_name;撤销角色connect:sql>revoke connect form user;
撤销角色resource:sql>revoke resource form user;
撤销权限unlimited tablespace:sql>revoke unlimited tablespace from user;
问题9:删除用户C##test。
sql>drop user user_name [cascade];cascade:当我们删除某个用户时,如果这个用户穿件过数据对象,那我们删除用户时,需要加上cascade,表示删除用户时,把该用户创建的数据对象一并删除。