oracle 用户创建及授权
在创建用户时,需要对用户授权,可以直接授权,也可以间接授权;
权限:
create session 允许用户登录数据库权限
create table 允许用户创建表权限
unlimited tablespace 允许用户在其他表空间随意建表
角色:connect ,resource,dba (一组权限集合)
CONNECT角色: --是授予最终用户的典型权利,最基本的权力,能够连接到ORACLE数据库中,并在对其他用户的表有访问权限时,做SELECT、UPDATE、INSERTT等操作。
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
RESOURCE角色: --是授予开发人员的,能在自己的方案中创建表、序列、视图等。
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型
DBA角色,是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限
创建表空间
创建数据表空间
create tablespace TEST_DATA
logging
datafile 'D:\soft\oracle\base\oradata\orcl\test_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m ;
create tablespace TEST2_DATA
logging
datafile '/home/u01/app/oracle/oradata/ytzx/test2_data.dbf'
size 10240M --50-100G
autoextend on next 2000M
maxsize unlimited
extent management local autoallocate
segment space management auto ;
创建临时表空间
create temporary tablespace test1temp
tempfile'/home/u01/app/oracle/oradata/ytzx/test1temp01.dbf'
size10240m
autoextendonnext1024m
maxsize20480m
extentmanagementlocal ;
查看当前用户使用的表空间
select username,default_tablespace from user_users;
创建用户
create user test1 identified by test1
default tablespace test1
temporary tablespace test1temp;
删除用户
drop user test1 cascade
管理用户
create user zhangsan;
//在管理员帐户下,创建用户zhangsan
alert user scott identified by tiger;
//修改密码
授予权限
新建的用户必须授予相关的权限才能登陆,访问,操作数据库
grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限,允许用户登录数据库
grant unlimited tablespace to zhangsan;//授予zhangsan用户使用表空间的权限
grant create table to zhangsan;//授予创建表的权限
grante drop table to zhangsan;//授予删除表的权限
grant insert table to zhangsan;//插入表的权限
grant update table to zhangsan;//修改表的权限
grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public)
oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权
例如A用户要访问B用户的USER表,需要将B用户的访问权限授予A
grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限
grant drop on tablename to zhangsan;//授予删除表的权限
grant insert on tablename to zhangsan;//授予插入的权限
grant update on tablename to zhangsan;//授予修改表的权限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限
案例分析:
测试环境新建了一个B用户,将之前A用户下的存储过程导入新用户下,发现其中部分存储过程编译报错;报错内容为"表或视图不存在";发现这些表都是C用户下的,但是直接通过plsqldevelop以select * from C.tablename 的形式的是可以访问的;经过研究,发现oracle对于在存储过程中引用其他用户下的表或者视图对象有特别的限制,要求B用户对这个表或者视图对象具有直接的SELECT 权限,而不是通过角色,如DBA间接获取的权限,否则就会报上述错误导致编译不通过;
产生授权脚本:
select 'grant select on C.'||t.table_name||' to B;' from user_tables;
撤销权限
REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;
查看权限
select * from user_sys_privs;//查看当前用户所有权限
select * from user_tab_privs;//查看所用用户对表的权限
select privilege from dba_sys_privs where grantee='TEST'
union
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='TEST' );
角色
角色即权限的集合,可以把一个角色授予给用户
create role myrole;//创建角色
grant create session to myrole;//将创建session的权限授予myrole
grant myrole to zhangsan;//授予zhangsan用户myrole的角色
drop role myrole;删除角色
创建同义词
创建同义词的目的是为了简化对目标对象的访问,特别是对于分布式数据库查询中,可以简化对查询语句的编写,且同义词不占用实际存储空间,如同视图一样,只在数据字典中保存了同义词的定义
Oracle中,同义词可以分为如下两类
1.公用同义词:能被所有的数据库用户访问的同义词,毫无疑问只有具有DBA权限的方案用户才可以设置;
2、私有同义词:只能由创建的用户访问的同义词;所以该用户应该具有创建同义词的权限,如果没有权限,则需要授权
grant create synonym to scott;
revoke create synonym from scott; 撤销权限
Drop synonym syn_name ; 删除同义词
同义词语法:
CREATE [PUBLIC] SYNONYM synonym FOR object;
针对上述语法:有以下几点需要说明:
1、一般来说,Oracle里,中括号里面的内容是可选内容,在这里,如果加上PUBLIC表示公用同义词,不加的话就是私有同义词;
2、synonym 这里表示同义词的名字
3、object表示要创建同义词的对象
案例:
A 用户访问B用户的EMP 表
正常的话需要 A用户登陆后通过 select * from B.EMP 访问,如果创建同义词
create synonym emp for B.emp ;则可以直接访问了,不需要加用户名
创建DBLINK
两台数据库服务器(本地)和(远程10.7.61.184),本地用户test需要访问到远程服务器下plfp的数据,这时就需要创建DBLink。
①先确定用户是否有创建DBLink的权限:
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');
如果没有,则需要使用 sysdba 角色给用户赋权
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to test;
这里有两个需要注意的问题:
-
dblink有三种权限:
CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了)
CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用)
DROP PUBLIC DATABASE LINK(删除dblink)
-
最后的test是本地数据库的用户名。
以用户test登录数据库,创建DBLink
create public database link lsxdlink
connect to plfp identified by plfp
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 10.7.64.184)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = lsxd)))';
说明
lsxdlink为你创建的dblink的名字;plfp为远程数据库用户的用户名;后边是plfp对应的密码;Host=后边是服务器的地址;SERVICE_NAME=后边是远程数据库的名称。
①使用DBLink
select * from fls_appl_info@lsxdlink
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成表名@dblink的名字。
②删除DBLink
drop public database link lsxdlink