十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一般建用户的过程:
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了乐亭免费建站欢迎大家使用!
sys用户登陆: sqlplus / as sysdba
建用户:create user user_name identified by password;
赋权限:grant resource,connect to user_name;
上面的过程建完用户后,用户即可使用,就是普通用户权限。
---
以上,希望对你能有帮助。
sys视图中:role01作为唯一的角色授权,那么他就是默认的。
user视图中:因为你没有全部继承角色的权限(包括密码),但是你还是授予了这个角色所以就是NO。
你可以尝试创建用户不设置密码,创建角色设置密码,然后把角色授给用户,再用这个用户登录(角色的密码)试试。不过创建角色设置密码,还真是头一次见到
SQL create role test_role;
角色已创建
SQL grant create any table,create procedure to test_role;
授权成功。
上面就是 创建一个角色, 然后 授权给角色 的 代码。
一般来说, 角色这种, 主要是方便长期的管理。
例如你管理一个仓库的数据库。
这个数据库有一个用户, 能够访问20张表。其中 只读的有5张, 另外15张表是可读写的。
如果不用角色的话, 就是 执行
grant ... to 那个用户, 20 次。
或许你会觉得, 也就20次嘛, 可以接受的。
好, 公司规模扩大。 新招了一个人进来, 权限和以前那个人一样。
那么你创建完那个用户以后, 又要
grant ... to 那个新用户, 20 次。
可能新来的人工资高了, 老员工不高兴,跳槽了, 公司又招了一个。
你又要
grant ... to 新来的用户, 20 次。
而使用角色的话, 你只需要一开始
grant ... to 角色, 20 次。
以后来一个员工
grant 角色 to 员工, 1 次 即可。
1.创建角色
create role hello;
2.给角色分配权限
grant create table to hello;
grant select on xxx to hello;
3.把角色赋予指定账户
grant hello to user;
4.删除角色
drop role hello;
ORACLE数据库中的权限和角色
Oracle数据库是一种大型关系型的数据库,我们知道当使用一个数据库时,仅仅能够控制哪些人可以访问数据库,哪些人不能访问数据库是无法满足数据库访问控制的。DBA需要通过一种机制来限制用户可以做什么,不能做什么,这在Oracle中可以通过为用户设置权限来实现。权限就是用户可以执行某种操作的权利。而角色是为了方便DBA管理权限而引入的一个概念,它实际上是一个命名的权限集合。
1 权限
Oracle数据库有两种途径获得权限,它们分别为:
① DBA直接向用户授予权限。
② DBA将权限授予角色(一个命名的包含多个权限的集合),然后再将角色授予一个或多个用户。
使用角色能够更加方便和高效地对权限进行管理,所以DBA应该习惯于使用角色向用户进行授予权限,而不是直接向用户授予权限。
Oracle中的权限可以分为两类:
•系统权限
•对象权限
1.1 系统权限
系统权限是在数据库中执行某种操作,或者针对某一类的对象执行某种操作的权利。例如,在数据库中创建表空间的权利,或者在任何模式中创建表的权利,这些都属于系统权限。在Oracle9i中一共提供了60多种权限。
系统权限的权利很大,通常情况下:
① 只有DBA才应当拥有alter database系统权限,该权限允许用户对数据库物理结构和可用性进行修改。
② 应用程序开发者一般应该拥有Create Table、Create View和Create Type等系统权限,用于创建支持前端的数据库模式对象。
③ 普通用户一般只具有Create session系统权限(可以通过Connection角色获得),只有Create Session系统权限的用户才能连接到数据库
④ 只有具有Grant Any PRivilege系统权限用户,或者获取了具有With Admin Option选项的系统权限的用户,才能够成为其它用户授予权限。
1.2对象权限
对象权限是针对某个特定的模式对象执行操作的权利。只能针对模式对象来设置和管理对象权限。
对于模式对象:表、视图、序列、存储过程、存储函数、包都可以对象设置权限。不同类型模式对象具有不同的对象权限。比如,表、视图等对象具有查询(Select)、修改(Update)、删除(Delete)等对象权限,而存储过程、存储函数等对象则具有执行(Execute)等对象权限。
但是并不是所有的模式对象都可以设置对象权限。比如簇、索引、触发器以及数据库链接等模式就不具有对象权限。这些模式对象的访问控制是通过相应的.系统权限来实现的,比如,要对索引进行修改,必须拥有Alter Any Index系统权限。
用户自动拥有他的模式中所有对象的全部对象权限,他可以将这些对象权限授予其他的用户或角色。比如,Test1用户创建了一个表Table1,在没有授权的情况下,用户Test2不能查询、修改、删除这个表。如果Test1将ETP表的Select对象权限授予了Test2,则该用户就可以查询Table1表了。如果在为其它用户授予对象权限时用了With Grant Option选项,被授予权限的用户还可以将这个权限在授予其他用户。
2 角色
2.1角色的概念
角色就是多个相关权限的命名集合。通过角色来进行对用户授予权限,可以大大简化DBA的工作量。比如,处于统一部门中的30多个用户都需要访问数据库中的一系列表,DBA可以将这些表的中合适的对象权限授予一个角色,然后在把这个角色授予这些用户,这样进行操作要比为没有用户进行授权要便捷多了,而且要对这些用户的权限进行统一修改,只需要修改角色的权限即可。
2.2角色的优点
通过角色为用户授予权限,而不是直接向各个用户授权,具有以下优点:
•简化权限管理 DBA将用户群分类,然后为每一类用户创建角色,并将该角色授予这类用户所需要的权限,最后在将改角色授予该类中的各个用户。这样不仅简化了授权操作,而且当这类用户的权限需求发生改变时,只需要把角色的权限进行改动,而不必修改每一位用户的权限。
•动态权限管理 角色可以被禁用或激活。当角色被禁止使用时,拥有该角色的用户不再拥有授予改角色的权限了。这样就可以对多个用户的权限进行动态控制了。
•灵活的编程能力 角色是存储在数据字典中的,并且可以为角色设置口令。这样就能够在应用程序中对角色进行控制。比如禁用或者激活等操作。
下面以Oracle9i为例,给出具体的实现用户授权:
(1)设定各种角色,及其权限
CREATE ROLE checkerrole DENTIFIEDBYxm361001;
CREATE ROLE defaultrole IDENTIFIEDBYdefaultrole;
GRANT SELECT,UPDATE ON
account.paytable TO checkerrole;
GRANT CONNECT TO defaultrole;
(2)创建用户
CREATE USER xiaoli IDENTIFIEDBY xiaoli;
(3)授权
GRANT checkerrole TO xiaoli;
GRANT defaultrole TO xiaoli;
(4)设定用户缺省的角色
ALTER USER xiaoli DEFAULTROLE defaultrole;
(5)注册过程
CONNECT xiaoli/xiaoli@oracle
此时用户只有其缺省角色的权限。
(6)激活角色
SET ROLE checkerrole IDENTIFIEDBY xm361001;
----操作成功后,xiaoli拥有checkerrole的权限。
----这里的角色和口令是固定的,在应用系统中可以由应用管理人员自行设置则更为方便安全
;
权限和角色的区别在那里。 \x0d\x0a 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统的权限;如果用户要访问其它方案的对象,则必须为其授予对象的权限。为了简化权限的管理,可以使用角色。\x0d\x0a权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对象权限两种。 \x0d\x0a\x0d\x0a系统权限 \x0d\x0a 系统权限介绍 \x0d\x0a 系统权限是指执行特定类型sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。oracle提供了100多种系统权限。 \x0d\x0a常用的有: \x0d\x0acreate session 连接数据库 create table 建表 \x0d\x0acreate view 建视图 create public synonym 建同义词 \x0d\x0acreate procedure 建过程、函数、包 create trigger 建触发器 \x0d\x0acreate cluster 建簇 \x0d\x0a\x0d\x0a 显示系统权限 \x0d\x0aoracle提供了100多种系统权限,而且oracle的版本越高,提供的系统权限就越多,我们可以查询数据字典视图system_privilege_map,可以显示所有系统权限。 \x0d\x0aselect * from system_privilege_map order by name; \x0d\x0a\x0d\x0a 授予系统权限 \x0d\x0a 一般情况,授予系统权限是由dba完成的,如果用其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授予其它的用户或是角色。为了让大家快速理解,我们举例说明: \x0d\x0a1.创建两个用户ken,tom。初始阶段他们没有任何权限,如果登录就会给出错误的信息。 \x0d\x0acreate user ken identfied by ken; \x0d\x0a2 给用户ken授权 \x0d\x0a1). grant create session, create table to ken with admin option; \x0d\x0a2). grant create view to ken; \x0d\x0a3 给用户tom授权 \x0d\x0a我们可以通过ken给tom授权,因为with admin option是加上的。当然也可以通过dba给tom授权,我们就用ken给tom授权: \x0d\x0a1. grant create session, create table to tom; \x0d\x0a2. grant create view to ken; --ok吗?不ok \x0d\x0a\x0d\x0a 回收系统权限 \x0d\x0a 一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成。 \x0d\x0a 当回收了系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联收回的问题?[不是级联回收!] \x0d\x0asystem ---------ken ----------tom \x0d\x0a(create session)(create session)( create session) \x0d\x0a用system执行如下操作: \x0d\x0arevoke create session from ken; --请思考tom还能登录吗? \x0d\x0a答案:能,可以登录 \x0d\x0a\x0d\x0a对象权限 \x0d\x0a 对象权限介绍 \x0d\x0a 指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。 \x0d\x0a比如smith用户要访问scott.emp表(scott:方案,emp:表) \x0d\x0a常用的有: \x0d\x0aalter 修改 delete 删除 select 查询 insert 添加 \x0d\x0aupdate 修改 index 索引 references 引用 execute 执行 \x0d\x0a 显示对象权限 \x0d\x0a 通过数据字段视图可以显示用户或是角色所具有的对象权限。视图为dba_tab_privs \x0d\x0aSQL conn system/manager; \x0d\x0aSQL select distinct privilege from dba_tab_privs; \x0d\x0aSQL select grantor, owner, table_name, privilege from dba_tab_privs where grantee = 'BLAKE'; \x0d\x0a\x0d\x0a1.授予对象权限 \x0d\x0a在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option)权限,从oracle9i开始,dba用户(sys,system)可以将任何对象上的对象权限授予其它用户。授予对象权限是用grant命令来完成的。 \x0d\x0a 对象权限可以授予用户,角色,和public。在授予权限时,如果带有with grant option选项,则可以将该权限转授给其它用户。但是要注意with grant option选项不能被授予角色。 \x0d\x0a1.monkey用户要操作scott.emp表,则必须授予相应的对象权限 \x0d\x0a1). 希望monkey可以查询scott.emp表的数据,怎样操作? \x0d\x0a grant select on emp to monkey; \x0d\x0a2). 希望monkey可以修改scott.emp的表数据,怎样操作? \x0d\x0a grant update on emp to monkey; \x0d\x0a3). 希望monkey可以删除scott.emp的表数据,怎样操作? \x0d\x0a grant delete on emp to monkey; \x0d\x0a4). 有没有更加简单的方法,一次把所有权限赋给monkey? \x0d\x0a grant all on emp to monkey; \x0d\x0a\x0d\x0a2.能否对monkey访问权限更加精细控制。(授予列权限) \x0d\x0a1). 希望monkey只可以修改scott.emp的表的sal字段,怎样操作? \x0d\x0a grant update on emp(sal) to monkey \x0d\x0a2).希望monkey只可以查询scott.emp的表的ename,sal数据,怎样操作? \x0d\x0a grant select on emp(ename,sal) to monkey \x0d\x0a... \x0d\x0a3.授予alter权限 \x0d\x0a如果black用户要修改scott.emp表的结构,则必须授予alter对象权限 \x0d\x0aSQL conn scott/tiger \x0d\x0aSQL grant alter on emp to blake; \x0d\x0a当然也可以用system,sys来完成这件事。 \x0d\x0a4.授予execute权限 \x0d\x0a如果用户想要执行其它方案的包/过程/函数,则须有execute权限。 \x0d\x0a比如为了让ken可以执行包dbms_transaction,可以授予execute权限。 \x0d\x0aSQL conn system/manager \x0d\x0aSQL grant execute on dbms_transaction to ken; \x0d\x0a5.授予index权限 \x0d\x0a如果想在别的方案的表上建立索引,则必须具有index对象权限。 \x0d\x0a如果为了让black可以在scott.emp表上建立索引,就给其index的对象权限 \x0d\x0aSQL conn scott/tiger \x0d\x0aSQL grant index on scott.emp to blake; \x0d\x0a6.使用with grant option选项 \x0d\x0a该选项用于转授对象权限。但是该选项只能被授予用户,而不能授予角色 \x0d\x0aSQL conn scott/tiger; \x0d\x0aSQL grant select on emp to blake with grant option; \x0d\x0aSQL conn black/shunping \x0d\x0aSQL grant select on scott.emp to jones; \x0d\x0a\x0d\x0a 回收对象权限 \x0d\x0a 在oracle9i中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。 \x0d\x0a 这里要说明的是:收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限是否会被级联收回?【级联回收】 \x0d\x0a如:scott-------------blake--------------jones \x0d\x0a select on emp select on emp select on emp \x0d\x0aSQL conn scott/tiger@accp \x0d\x0aSQL revoke select on emp from blake \x0d\x0a请大家思考,jones能否查询scott.emp表数据。 \x0d\x0a答案:查不了了(和系统权限不一样,刚好相反)\x0d\x0a \x0d\x0a角色:\x0d\x0a角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理,假定有用户a,b,c为了让他们都拥有权限 \x0d\x0a1. 连接数据库 \x0d\x0a2. 在scott.emp表上select,insert,update。 \x0d\x0a如果采用直接授权操作,则需要进行12次授权。 \x0d\x0a因为要进行12次授权操作,所以比较麻烦喔!怎么办? \x0d\x0a\x0d\x0a 如果我们采用角色就可以简化: \x0d\x0a 首先将creat session,select on scott.emp,insert on scott.emp, update on scott.emp授予角色,然后将该角色授予a,b,c用户,这样就可以三次授权搞定。 \x0d\x0a 角色分为预定义和自定义角色两类: \x0d\x0a 预定义角色 \x0d\x0a预定义角色是指oracle所提供的角色,每种角色都用于执行一些特定的管理任务,下面我们介绍常用的预定义角色connect,resource,dba \x0d\x0a1.connect角色 \x0d\x0aconnect角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和resource角色就够了,那么connect角色具有哪些系统权限呢? \x0d\x0aalter session \x0d\x0acreate cluster \x0d\x0acreate database link \x0d\x0acreate session \x0d\x0acreate table \x0d\x0acreate view \x0d\x0acreate sequence \x0d\x0a\x0d\x0a2.resource角色 \x0d\x0a resource角色具有应用开发人员所需要的其它权限,比如建立存储过程,触发器等。这里需要注意的是resource角色隐含了unlimited tablespace系统权限。 \x0d\x0aresource角色包含以下系统权限: \x0d\x0acreate cluster \x0d\x0acreate indextype \x0d\x0acreate table \x0d\x0acreate sequence \x0d\x0acreate type \x0d\x0acreate procedure \x0d\x0acreate trigger \x0d\x0a3.dba角色 \x0d\x0adba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system,它们可以将任何系统权限授予其他用户。但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)。 \x0d\x0a\x0d\x0a 自定义角色 \x0d\x0a顾名思义就是自己定义的角色,根据自己的需要来定义。一般是dba来建立,如果用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)。 \x0d\x0a1.建立角色(不验证) \x0d\x0a如果角色是公用的角色,可以采用不验证的方式建立角色。 \x0d\x0a create role 角色名 not identified; \x0d\x0a2.建立角色(数据库验证) \x0d\x0a 采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必须提供口令。在建立这种角色时,需要为其提供口令。 \x0d\x0acreate role 角色名 identified by 密码; \x0d\x0a\x0d\x0a 角色授权 \x0d\x0a当建立角色时,角色没有任何权限,为了使得角色完成特定任务,必须为其授予相应的系统权限和对象权限。 \x0d\x0a1.给角色授权 \x0d\x0a 给角色授予权限和给用户授权没有太多区别,但是要注意,系统权限的unlimited tablespace和对象权限的with grant option选项是不能授予角色的。 \x0d\x0aSQL conn system/manager; \x0d\x0aSQL grant create session to 角色名 with admin option \x0d\x0aSQL conn scott/tiger@myoral; \x0d\x0aSQL grant select on scott.emp to 角色名; \x0d\x0aSQL grant insert, update, delete on scott.emp to 角色名; \x0d\x0a通过上面的步骤,就给角色授权了。 \x0d\x0a2.分配角色给某个用户 \x0d\x0a 一般分配角色是由dba来完成的,如果要以其它用户身份分配角色,则要求用户必须具有grant any role的系统权限。 \x0d\x0aSQL conn system/manager; \x0d\x0aSQL grant 角色名 to blake with admin option; \x0d\x0a因为我给了with admin option选项,所以,blake可以把system分配给它的角色分配给别的用户。 \x0d\x0a\x0d\x0a 删除角色 \x0d\x0a 使用drop role,一般是dba来执行,如果其它用户则要求该用户具有drop any role系统权限。 \x0d\x0aSQL conn system/manager; \x0d\x0aSQL drop role 角色名; \x0d\x0a问题:如果角色被删除,那么被授予角色的用户是否还具有之前角色里的权限? \x0d\x0a答案:不具有了 \x0d\x0a\x0d\x0a 显示角色信息 \x0d\x0a1.显示所有角色 \x0d\x0aSQL select * from dba_roles; \x0d\x0a2.显示角色具有的系统权限 \x0d\x0aSQL select privilege, admin_option from role_sys_privs where role='角色名'; \x0d\x0a3.显示角色具有的对象权限 \x0d\x0a 通过查询数据字典视图dba_tab_privs可以查看角色具有的对象权限或是列的权限。 \x0d\x0a4.显示用户具有的角色,及默认角色 \x0d\x0a 当以用户的身份连接到数据库时,oracle会自动的激活默认的角色,通过查询数据字典视图dba_role_privs可以显示某个用户具有的所有角色及当前默认的角色 \x0d\x0aSQL select granted_role, default_role from dba_role_privs where grantee = ‘用户名’; \x0d\x0a\x0d\x0a 精细访问控制 \x0d\x0a 精细访问控制是指用户可以使用函数,策略实现更加细微的安全访问控制。如果使用精细访问控制,则当在客户端发出sql语句(select,insert,update,delete)时,oracle会自动在sql语句后追加谓词(where子句),并执行新的sql语句,通过这样的控制,可以使得不同的数据库用户在访问相同表时,返回不同的数据信息,如: \x0d\x0a用户 scott blake jones \x0d\x0a策略 emp_access \x0d\x0a 数据库表 emp \x0d\x0a如上图所示,通过策略emp_access,用户scott,black,jones在执行相同的sql语句时,可以返回不同的结果。例如:当执行select ename from emp; 时,根据实际情况可以返回不同的结果。 \x0d\x0a\x0d\x0a实际上角色有点像JAVA中的代码重构.预定义角色和自定义角色就像是吃饭时的套餐和自助餐.