每次谈到用户和权限,总感觉没什么去分享和交流的。其实不然,不恰当的去形容好比你是个客户去买房子,你去看200W的房子和1000W的房子那绝对不一样,服务级别享受待遇也截然不同。
数据库中用户和权限好比钱和房子,你用户级别越高其实对应的权限越高,技术无非都是从这个世界人性化演变过来的。扯的多一些,那么我数据库中用户密码最基本的信息,用户使用特定用户账号队友自己的特点和操作权限。那么角色就是权限的集合,角色可以分配给用户(给你钥匙),把这个权限特定集合分配用户。
啥叫用户?
分为两类:1、创建库的时候系统自己创建的用户(系统用户) 2、另一种用系统用户创建的用户,叫普通用户
格式:
select username,account_status,default_tablespace,temprorary_tablespace from user_users;
解释:
查询当年系统中所有的用户和状态所属的表空间。
格式:
create user user_name identified by password default tablespace users;
解释:
学习Oracle一定要学会用英语去看,用英语翻译上一句命令就是,创建用户user_name确认密码password默认表空间是users;其实一句话的是,无压力(黑色是关键字)。
dba_user这个表也可以查看详细的信息,一个库表,一个用户!
用户与模式(Schema)
模式就是说用户拥有的对象集合。对象有表,索引,触发器等等。每个用户都会有独立的模式信息,新建用户除外,他们的集合为空的。Schema为空,Schema必须依赖于用户存在。
格式:
select sys_count('userenv','current_user')current_user,sys_countext('userevn','current_schema')current_schema from dual;
解释:
通过本条的查询语句发现我们用System登录后可以看到集合,到底有啥意义呢,就是说Schema_对象名组合可以限制数据库中唯一的对象。
系统用户sys和system
系统用户sys和system是最常用的两个用户系统,那么sys是ORACLE数据库中最高权限用户,角色为sysdba(数据库管理员), system仅次于sys用户,角色是SYSOPER(数据库操作员).比如sys可以创建库,那么system不可以结合没有这个权限(默认没有)。
格式:
show parameter db_name;
解释:
代码show parameter用于显示说明db_name(数据库名称)参数信息。
格式:
alter user system account unlock;
解释:
解锁用户,比如scott用户默认是不能登陆状态,解锁后dba_users查询状态则是OPEN打开
格式:
alter user scott identified by password;
解释:
修改scott的密码,然后登陆。
权限好比你等级,好比法律就是你在社会制度中的最高等级,Privilege的对象用户,只要是数据库操作对象和可执行的多动都会受到限制的。那么也有两种权限:1、系统权限 2、对象权限
系统权限:
系统权限是针对数据库特定操作,如创建数据表,与对象权限不用,对已有的对象进行访问和操作。
格式:
select distinct privilege from dba_sys_privs;
解释:
查看系统权限都有哪一些(主要组成部分)
分配权限:
格式:
grant create session to tiger; --赋予创建会话(连接)的权限
grant create table to tiger; --赋予创建表权限
alter user tiger quota 10M on users quota 2M on temp;--因为没有分配用户能使用多大的表空间没权限,用system分配空间大小
select * from dba_sys_privs where lower(grantee) = 'tiger';--查询tiger用户目前有的系统权限
revoke create table from tiger; --撤回回收赋予tiger的权限
对象权限:
格式:
select grantee,table_name,privilege from dba_tab_privs where lower(grantee)='tiger';
解释:
查看grantee有的对象权限。
格式:
grant select on dual to tiger;--把system查询dual赋权给tiger
grant insert on table to tiger; --赋予创建table(指定表名)权限
grant update(table_name) to tiger; --赋权只能更新这表中的name列;
grant all on table to tiger;--赋权全部对象权限
revoke all on table to tiger;--将tiger的对象权限全部收回
角色:
虽然我们可以利用系统和对象权限去控制,我们会发现任务量会变的非常复杂麻烦,在这个背景下,Oralce提出了角色的概念,角色我们该是介绍过就是系统权限或者对象权限的集合。Oracle允许创建角色,然后将角色信息赋予用户,从而间接的将权限信息添加给用户,重要的是角色可复用,某一种程度上大大减少了重复的工作和代码量。
利用继承的特性,从简单的角色衍生出复杂的角色,无疑提高的权限分配的工作和效率
一起来创建一个角色
格式:
create role role_employee;
解释:
create role创建角色的关键字
格式:
grant all on table to role_employee;--赋予全部权限给角色role
grant role_employee to tiger;--把角色的全部权限给tiger用户,需要注意必须重新登录数据库才可以生效。
继承角色:
角色可以继承另一个角色的权限信息,减少自身grant的动作指令
格式:
grant system to role_employee;
解释:
把system的权限赋权给角色role,虽然感觉意义不大,但是一些严谨的数据库对用户安全会非常重视,每一个角色都会有分类,当代码量比较复杂时候角色的用处当然会很重要。
格式:
alter user cat default role none;
解释:
禁止cat用户默认角色全部禁止,查询session_roles则为空
格式:
set role role_hr;
解释:
启动角色role_hr,如果有多个角色可以用逗号隔开
到最后回头看一看文章,就是用户角色权限三者变化和相互依赖的关系,数据库安全仅仅依赖用户的控制是不可行的,那么一个相对安全逻辑紧密的数据库没有用户角色权限等策略是一定不行的,清晰思路一切难题都会迎刃而解!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。