oracle安全性
创建和管理数据库用户账户
用户登录到数据库,通过指定一个账户名以及某种身份验证方式连接到用户账户.
用户:用某个用户账户名建立针对实例的会话,并进行登录来连接到该账户的个人.
模式(schema):用户账户拥有的一组对象.
用户账户属性
用户账户拥有很多在创建账户时定义的属性,这些将用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性:
-用户名
-身份验证方法
-默认表空间
-表空间配额
-临时表空间
-用户配置文件
-账户状态
创建用户时指定以上属性,但其中只有用户名和身份验证方式是必须的,其它军有默认值.
1.用户名:
必须唯一,必须以字母开头,不超过30个,不能是保留字,区分大小写,但会自动转为大写字母,除非你要玩自己在双引号中指定用户名,可以不遵守这些规则(长度除外)
用户名创建后不能更改,想改?删了(同时用户模式所有对象都会删除)重建.
2.默认表空间配额:
每个账户都有默认的表空间,用户的任何模式对象(表,索引等)将保存在此表空间中.
select property_value from database_properties
where property_name='DEFAULT_PERMANENT_TABLESPACE'
如果创建用户时没指定默认表空间,那就使用数据库的默认表空间给所有用户账户.可以在创建数据库时设置默认表空间,也可随时更改:
alter tablespace default tablespace 空间名;
配额(quota):
表空间中为用户的模式对象分配的空间量.到达配额前随意创建对象,用尽后则无法创建任何对象.如果将某用户配额改为小于其拥有的对象大小,那么对象将不变,但不允许变大.
select username,default_tablespace,temporary_tablespace from dba_users
where username='HR' --查询用户hr的默认表空间和临时表空间
alter user hr quota 10M on users --hr有权占用user表空间的10M空间
alter user hr quota unlimited on example --hr在example上可使用不限量空间
创建表,用户必须有create table权限,并且拥有在其中创建表的表空间上的配额.
2.临时表空间
永久对象(比如表)存储在永久表空间中,临时对象就存在临时表空间中.如果会话执行操作需要的空间量超出了PGA 的可用空间量,就需要临时表空间中的空间.
PGA是程序全局区,是分配给会话的专用内存.需要临时空间(如果可能,在内存中,如有必要在临时表空间中)的操作包括排序,联接表,构建索引和使用临时表.
回味每个用户账户分配临时表空间,但连接到 该账户的all用户会话将共享此临时表空间.
临时表空间的管理自动完成,不用你操心,数据库自己会根据需要创建,删除临时对象,不用为用户授予临时表空间的配额.因为临时表空间的对象不归用户
所有,而属于SYS用户,SYS用户拥有所有表空间上的无限配额.
要更改用户的临时表空间:
alter user 用户名 temporary tablespace 临时空间名;
4.配置文件
用户的配置文件控制口令设置,并在一定程度上控制资源的使用.配置文件时管理口令和资源的有效方法,但实际上只适用于每个应用程序都有自己的数据库用户账户的环境.
5.用户账户状态:
select account_status from dba_users
常见的也就是open,locked,expired,expired&locked
锁定或解锁某一账户:
alter user 用户名 account unlock;
alter user 用户名 account lock;
强制用户更改口令:
alter user 用户名 password expire;
身份验证方法
用户必须有身份验证方法:数据库借助这些方法,确定尝试创建会话的用户是否有权这么做.最简单的是提供一个与数据库中保存的口令相匹配的口令,除此之外还有其他方法:
-操作系统身份验证(管理员专用)
-口令文件身份验证(管理员专用)
-口令身份验证
-外部身份验证
-全局身份验证
1.操作系统和口令文件身份验证
必须为用户授予SYSDBA or SYSOPER权限:
grant [ sysdba | sysoper ] to 用户名;
一旦授予后,就会将用户口令从数据字典复制到外部口令文件中,此后数据库即使没打开,实例也可读取口令
connect sys/bob@bob as sysdba | sysoper;
更改用户口令,需要有权限的用户来:
alter user 用户名 identified by 新密码;
3.外部身份验证
4.全局身份验证
创建账户
create user必须有用户名和身份验证方法:
create user myla identified by yang --用户名,用与口令验证的口令
default tablespace users temporary temp --提供默认表空间和临时表空间
quota 100m on users,unlimited on example --设定配额
profile developer_profile --为用户口令和资源管理的配置文件名
password expire --强制用户更改口令
account unlock; --解锁用户,可用(默认设置)
要改口令:
alter user myla identified by yang;
更改默认表空间临时表空间:
alter user myla default tablespace newusers temporary temp01;
更改配额:
alter user myla quota unlimited on newusers,quota 0 on users;
更改配置文件:
alter user myla profile prod_profile;
强制用户更改口令:
alter user myla password expire;
锁定账户:
alter user myla lock;
删除账户(一旦拥有对象就得加cascade了:
drop user myla cascade;
public用户挺有意思,它是个概念用户,如果想给所有用户授权,你可以将权限授予public,那么所有用户就都拥有你赋予的某个权限了.
授予可撤销权限
默认下非授权用户不能在数据库中进行任何操作,用grant授权,revoke撤销权限.默认下SYS和SYSTEM才有权授予任何权限.
将权限授予他人的叫授予者grantor,被授予的叫grantee.
权限有两种:系统权限(用户可执行影响数据字典的操作)和对象权限(可以执行影响主句的操作)
系统权限
大约200种,大多数应用于影响数据字典的操作,比如创建用户或表.其它的影响数据库或实例,比如创建表空间,调整实例参数值,建立会话等.常用的权限如下:
-create session 允许用户进行连接,否则用户都无法登录到数据库
-alter database 允许访问多个修改物理结构所需的命令
-create tablespace 允许被授权人在自己的模式创建,更改或删除表,在其上运行select和DML命令,创建更改删除索引
-grant any object privilege 允许被授权人将其本身没有的对象的对象权限授予他人,但不能授予自己.
-create any table 被授权人可以创建属于其他用户的表
-drop any table 被授权人可以删除属于其他用户的表
insert/update/delete any table 被授权人可以对所有其它用户拥有的表执行DML命令
select any table 可以对任何表执行select命令
授予权限的语法:
grant privilege [ ,privilege... ] to 用户名;
创建用户账户后,通常给用户如下系统权限:
grant create session,alter session,
create table,create view,create synonym,create cluster,create database link,
create sequence,create trigger,create type,create procedure,create operator
to 用户名;
这些权限允许用户连接和配置会话,创建存储数据的对象和PL/SQL对象,只存在于其模式中,用户没有针对其他模式的权限,对象的创建也受到为其分配
的配额的限制.
此语法的一个变体允许被授权人将权限传递给第三方,比如:
connect sys/bob
grant create table to myla with admin option;
connect myla/yang
grant create table to peach;
这给予了myla发出grant的权利,让peach也能创建表,但peach只在自己的模式中创建表
用户被授予带有admin option的权限,即使对其做了撤销,其给别人的权限也都保留,也就是说不存在撤销级联.
来个栗子:A grant ... to B admin option,B grant ... to C,把B的权限撤消了,也不影响C拥有的权限.
!!!系统权限的撤销不会级联,而对象权限的撤销是有级联效应的.
any权限要慎用,因为针对的是数据库所有相关对象给予权限:
grant select any table to myla;
此时myla能查询每个模式的每个表,除系统管理员外,any权限给谁都不稳妥!
对象权限
对象权限允许针对表和相关对象执行select,insert,update,delete命令,也允许执行PL/SQL对象.这些权限不存在于用户自己的模式对象中 .如果用户有create table权限,
那就能对创建的表执行select和DML操作,而不用额外再给它什么权限.
不同权限的授权对象
权限 不同权限的授权对象
select 表,视图,序列和同义词
insert 表,视图和同义词
update 表,视图和同义词
delete 表,视图和同义词
alter 表和序列
execute 过程,函数,包和同义词
语法如下:
grant privilege on [ schema. ] object to 用户名 [ with grant option ];
例如:
grant select on store.customers to myla;
grant update (order_status) on store.orders to myla;
grant all on store.regions to myla;
允许myla查询score模式中的orders表的所有列,但只对一个列order_status执行写操作.此后myla给予了store的regions表的所有对象权限(select和DML)
一般在列级别授权有些繁琐,创建一个显示特定列的视图,更方便一些.
使用with grant option可将对象权限传给第三方,会产生级联效应
再来个栗子:A grant ... to B with grant option,B grant ... to C,把B的权限撤消了, C也没了...权限.
查查某个用户都有哪些对象权限and系统权限
--select grantee,privilege,grantor,grantable from dba_tab_privs
select * from dba_tab_privs
where owner='HR' and table_name='JOBS'
select * from dba_sys_privs
where grantee='HR'
创建和管理角色
角色不是模式对象:不属于任何人,所以前面不能加用户名,但角色可以与用户共享同一个名称空间:创建的角色不能与已有用户同名,也不能与已有角色同名.
create role 角色名;
然后用普通方式给角色授权,根据需要with admin option或with grant option
可以将角色授予另一个角色,角色的撤销不会级联.
预先定义的角色
-connect 高版本中只有create session权限
-resource 可创建数据对象(表)和过程对象(PL/SQL),还有unlimited tablespace权限
-DBA 有大多数系统权限,被授予的用户除了启动关闭数据库,其它权限都有.
-select_catalog_role 针对数据字典对象的2000多个对象权限,但没有系统权限或针对用户数据的权限.这对新管理员有用,这些人监视数据库并报告数据库情况,但看不到数据.
-scheduler_admin 有管理调度服务的调度程序所需的系统权限
还有个预定义的public,此角色始终授予每个用户,给public任何权限,大家就都有了此权限.
创建和管理配置文件
创建和管理数据库用户账户
用户登录到数据库,通过指定一个账户名以及某种身份验证方式连接到用户账户.
用户:用某个用户账户名建立针对实例的会话,并进行登录来连接到该账户的个人.
模式(schema):用户账户拥有的一组对象.
用户账户属性
用户账户拥有很多在创建账户时定义的属性,这些将用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性:
-用户名
-身份验证方法
-默认表空间
-表空间配额
-临时表空间
-用户配置文件
-账户状态
创建用户时指定以上属性,但其中只有用户名和身份验证方式是必须的,其它军有默认值.
1.用户名:
必须唯一,必须以字母开头,不超过30个,不能是保留字,区分大小写,但会自动转为大写字母,除非你要玩自己在双引号中指定用户名,可以不遵守这些规则(长度除外)
用户名创建后不能更改,想改?删了(同时用户模式所有对象都会删除)重建.
2.默认表空间配额:
每个账户都有默认的表空间,用户的任何模式对象(表,索引等)将保存在此表空间中.
select property_value from database_properties
where property_name='DEFAULT_PERMANENT_TABLESPACE'
如果创建用户时没指定默认表空间,那就使用数据库的默认表空间给所有用户账户.可以在创建数据库时设置默认表空间,也可随时更改:
alter tablespace default tablespace 空间名;
配额(quota):
表空间中为用户的模式对象分配的空间量.到达配额前随意创建对象,用尽后则无法创建任何对象.如果将某用户配额改为小于其拥有的对象大小,那么对象将不变,但不允许变大.
select username,default_tablespace,temporary_tablespace from dba_users
where username='HR' --查询用户hr的默认表空间和临时表空间
alter user hr quota 10M on users --hr有权占用user表空间的10M空间
alter user hr quota unlimited on example --hr在example上可使用不限量空间
创建表,用户必须有create table权限,并且拥有在其中创建表的表空间上的配额.
2.临时表空间
永久对象(比如表)存储在永久表空间中,临时对象就存在临时表空间中.如果会话执行操作需要的空间量超出了PGA 的可用空间量,就需要临时表空间中的空间.
PGA是程序全局区,是分配给会话的专用内存.需要临时空间(如果可能,在内存中,如有必要在临时表空间中)的操作包括排序,联接表,构建索引和使用临时表.
回味每个用户账户分配临时表空间,但连接到 该账户的all用户会话将共享此临时表空间.
临时表空间的管理自动完成,不用你操心,数据库自己会根据需要创建,删除临时对象,不用为用户授予临时表空间的配额.因为临时表空间的对象不归用户
所有,而属于SYS用户,SYS用户拥有所有表空间上的无限配额.
要更改用户的临时表空间:
alter user 用户名 temporary tablespace 临时空间名;
4.配置文件
用户的配置文件控制口令设置,并在一定程度上控制资源的使用.配置文件时管理口令和资源的有效方法,但实际上只适用于每个应用程序都有自己的数据库用户账户的环境.
5.用户账户状态:
select account_status from dba_users
常见的也就是open,locked,expired,expired&locked
锁定或解锁某一账户:
alter user 用户名 account unlock;
alter user 用户名 account lock;
强制用户更改口令:
alter user 用户名 password expire;
身份验证方法
用户必须有身份验证方法:数据库借助这些方法,确定尝试创建会话的用户是否有权这么做.最简单的是提供一个与数据库中保存的口令相匹配的口令,除此之外还有其他方法:
-操作系统身份验证(管理员专用)
-口令文件身份验证(管理员专用)
-口令身份验证
-外部身份验证
-全局身份验证
1.操作系统和口令文件身份验证
必须为用户授予SYSDBA or SYSOPER权限:
grant [ sysdba | sysoper ] to 用户名;
一旦授予后,就会将用户口令从数据字典复制到外部口令文件中,此后数据库即使没打开,实例也可读取口令
connect sys/bob@bob as sysdba | sysoper;
更改用户口令,需要有权限的用户来:
alter user 用户名 identified by 新密码;
3.外部身份验证
4.全局身份验证
创建账户
create user必须有用户名和身份验证方法:
create user myla identified by yang --用户名,用与口令验证的口令
default tablespace users temporary temp --提供默认表空间和临时表空间
quota 100m on users,unlimited on example --设定配额
profile developer_profile --为用户口令和资源管理的配置文件名
password expire --强制用户更改口令
account unlock; --解锁用户,可用(默认设置)
要改口令:
alter user myla identified by yang;
更改默认表空间临时表空间:
alter user myla default tablespace newusers temporary temp01;
更改配额:
alter user myla quota unlimited on newusers,quota 0 on users;
更改配置文件:
alter user myla profile prod_profile;
强制用户更改口令:
alter user myla password expire;
锁定账户:
alter user myla lock;
删除账户(一旦拥有对象就得加cascade了:
drop user myla cascade;
public用户挺有意思,它是个概念用户,如果想给所有用户授权,你可以将权限授予public,那么所有用户就都拥有你赋予的某个权限了.
授予可撤销权限
默认下非授权用户不能在数据库中进行任何操作,用grant授权,revoke撤销权限.默认下SYS和SYSTEM才有权授予任何权限.
将权限授予他人的叫授予者grantor,被授予的叫grantee.
权限有两种:系统权限(用户可执行影响数据字典的操作)和对象权限(可以执行影响主句的操作)
系统权限
大约200种,大多数应用于影响数据字典的操作,比如创建用户或表.其它的影响数据库或实例,比如创建表空间,调整实例参数值,建立会话等.常用的权限如下:
-create session 允许用户进行连接,否则用户都无法登录到数据库
-alter database 允许访问多个修改物理结构所需的命令
-create tablespace 允许被授权人在自己的模式创建,更改或删除表,在其上运行select和DML命令,创建更改删除索引
-grant any object privilege 允许被授权人将其本身没有的对象的对象权限授予他人,但不能授予自己.
-create any table 被授权人可以创建属于其他用户的表
-drop any table 被授权人可以删除属于其他用户的表
insert/update/delete any table 被授权人可以对所有其它用户拥有的表执行DML命令
select any table 可以对任何表执行select命令
授予权限的语法:
grant privilege [ ,privilege... ] to 用户名;
创建用户账户后,通常给用户如下系统权限:
grant create session,alter session,
create table,create view,create synonym,create cluster,create database link,
create sequence,create trigger,create type,create procedure,create operator
to 用户名;
这些权限允许用户连接和配置会话,创建存储数据的对象和PL/SQL对象,只存在于其模式中,用户没有针对其他模式的权限,对象的创建也受到为其分配
的配额的限制.
此语法的一个变体允许被授权人将权限传递给第三方,比如:
connect sys/bob
grant create table to myla with admin option;
connect myla/yang
grant create table to peach;
这给予了myla发出grant的权利,让peach也能创建表,但peach只在自己的模式中创建表
用户被授予带有admin option的权限,即使对其做了撤销,其给别人的权限也都保留,也就是说不存在撤销级联.
来个栗子:A grant ... to B admin option,B grant ... to C,把B的权限撤消了,也不影响C拥有的权限.
!!!系统权限的撤销不会级联,而对象权限的撤销是有级联效应的.
any权限要慎用,因为针对的是数据库所有相关对象给予权限:
grant select any table to myla;
此时myla能查询每个模式的每个表,除系统管理员外,any权限给谁都不稳妥!
对象权限
对象权限允许针对表和相关对象执行select,insert,update,delete命令,也允许执行PL/SQL对象.这些权限不存在于用户自己的模式对象中 .如果用户有create table权限,
那就能对创建的表执行select和DML操作,而不用额外再给它什么权限.
不同权限的授权对象
权限 不同权限的授权对象
select 表,视图,序列和同义词
insert 表,视图和同义词
update 表,视图和同义词
delete 表,视图和同义词
alter 表和序列
execute 过程,函数,包和同义词
语法如下:
grant privilege on [ schema. ] object to 用户名 [ with grant option ];
例如:
grant select on store.customers to myla;
grant update (order_status) on store.orders to myla;
grant all on store.regions to myla;
允许myla查询score模式中的orders表的所有列,但只对一个列order_status执行写操作.此后myla给予了store的regions表的所有对象权限(select和DML)
一般在列级别授权有些繁琐,创建一个显示特定列的视图,更方便一些.
使用with grant option可将对象权限传给第三方,会产生级联效应
再来个栗子:A grant ... to B with grant option,B grant ... to C,把B的权限撤消了, C也没了...权限.
查查某个用户都有哪些对象权限and系统权限
--select grantee,privilege,grantor,grantable from dba_tab_privs
select * from dba_tab_privs
where owner='HR' and table_name='JOBS'
select * from dba_sys_privs
where grantee='HR'
创建和管理角色
角色不是模式对象:不属于任何人,所以前面不能加用户名,但角色可以与用户共享同一个名称空间:创建的角色不能与已有用户同名,也不能与已有角色同名.
create role 角色名;
然后用普通方式给角色授权,根据需要with admin option或with grant option
可以将角色授予另一个角色,角色的撤销不会级联.
预先定义的角色
-connect 高版本中只有create session权限
-resource 可创建数据对象(表)和过程对象(PL/SQL),还有unlimited tablespace权限
-DBA 有大多数系统权限,被授予的用户除了启动关闭数据库,其它权限都有.
-select_catalog_role 针对数据字典对象的2000多个对象权限,但没有系统权限或针对用户数据的权限.这对新管理员有用,这些人监视数据库并报告数据库情况,但看不到数据.
-scheduler_admin 有管理调度服务的调度程序所需的系统权限
还有个预定义的public,此角色始终授予每个用户,给public任何权限,大家就都有了此权限.
创建和管理配置文件
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25025926/viewspace-1124519/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25025926/viewspace-1124519/