在创建用户时,需要对用户授权,可以直接授权,也可以间接授权;
权限:
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任意表的权限
产生授权脚本:
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;
这里有两个需要注意的问题: 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)))';
说明plfp
为远程数据库用户的用户名;后边是plfp对应的密码;Host=
后边是服务器的地址;SERVICE_NAME=
后边是远程数据库的名称。
①使用DBLink
select * from fls_appl_info@lsxdlink
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成表名@dblink的名字
。
②删除DBLink
drop public database link lsxdlink