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;  
这里有两个需要注意的问题: 
1. dblink有三种权限: 
CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了) 
CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用) 
DROP PUBLIC DATABASE LINK(删除dblink) 

2. 最后的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















你可能感兴趣的:(数据库)