ORACLE里面的权限有系统权限和对象权限两种
权限查询
select distinct p.privilege from user_sys_privs p order by p.privilege asc;--查询所有系统权限
select distinct t.privilege from user_tab_privs t;--查询所有的对象权限
常用的系统权限有 :
CREATE SESSION | 创建会话 登录数据库 |
---|---|
CREATE SEQUENCE | 创建序列 |
CREATE SYNONYM | 创建同名对象 |
CREATE TABLE | 在用户模式中创建表 |
CREATE ANY TABLE | 在任何模式中创建表 |
DROP ANY TABLE | 在任何模式中删除表 |
CREATE PROCEDURE | 创建存储过程 |
EXECUTE ANY PROCEDURE | 执行任何模式的存储过程 |
CREATE USER | 创建用户 |
DROP USER | 删除用户 |
CREATE VIEW | 创建视图 |
常用对象权限:
FLASHBACK,EXECUTE,ON COMMIT REFRESH,ALTER,DEQUEUE,UPDATE,DELETE,DEBUG,UNDER,QUERY REWRITE,SELECT,READ,INSERT,INDEX,WRITE,REFERENCES,MERGE VIEW
1.create user usertestxxx identified by passwordtestxxx;--创建用户 usertestxxx 密码是passwordtestxxx
drop user usertestxxx;--只是删除用户usertestxxx
drop user usertestxxx cascade;--会删除此用户名下(usertestxxx)的所有表和视图
2.grant CONNECT to usertestxxx;--授权连接权限(系统权限)
grant create procedure to usertestxxx;--授权创建存储过程权限(系统权限)
grant execute any procedure to usertestxxx;--授权执行任何用户的存储过程权限(系统权限)
grant create job to usertestxxx;--授权创建job权限(系统权限)
grant manage scheduler to usertestxxx;--授权管理job权限(系统权限)
GRANT SELECT, INSERT ,UPDATE,DELETE ON user2.tablexxx TO usertestxxx;--将用户user2下的tablexxx表的查询,插入,更新,删除权限 授权给usertestxxx
GRANT ALTER ON user2.tablexxx TO usertestxxx;--将用户user2下的tablexxx表的修改权限(alter 有 truncate 权限)权限 授权给usertestxxx
3.查看job运行日志(output中保存错误信息或者dbms_output.put_line写的内容)
SELECT OWNER, JOB_NAME, STATUS, ACTUAL_START_DATE,OUTPUT FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'JOB_NAME' ORDER BY LOG_DATE DESC;
4.创建角色
create role userxxx;--创建角色
grant select on user2.tablexxx to userxxx;--将用户user2下的tablexxx表的select权限 授权给角色userxxx
grant userxxx to usertestxxx;--将角色userxxx的权限授权给用户usertestxxx(这样授权usertestxxx就拥有了角色userxxx的全部权限。角色userxxx也可以将权限授权给其他用户。如果多个用户的一部分权限相同,可以利用角色授权。)
例子:
--system账户下执行
create user NEWUSER identified by test1234;--创建用户NEWUSER 密码test1234
GRANT CREATE SESSION TO NEWUSER; 授权连接权限
GRANT CREATE PROCEDURE TO NEWUSER --授权创建存储过程权限
GRANT CREATE JOB TO NEWUSER;--授权创建job权限
--USER1账号下执行
GRANT SELECT, DELETE ON USER1.TT_TABLE1 TO NEWUSER;//将USER1下表TT_TABLE1的查询删除权限赋给NEWUSER
GRANT SELECT, DELETE,INSERT,UPDATE ON USER1.TT_TABLE2 TO NEWUSER;//将USER1下表TT_TABLE2的查询删除插入更新权限赋给NEWUSER
创建dblink
要注意关闭两台计算机上的Windows的防火墙,否则,会出现能ping通,但Oracle连接不通的情况。
首先查询当前用户是否有创建dblink的权限,如果没有,需要赋权
select * from user_sys_privs t where t.privilege like upper('%link%');
赋权语句:
grant create public database link to newuser;--赋权公共dblink,public表示所创建的dblink所有用户都可以使用
grant create database link to newuser;--赋权公共dblink ,所创建的dblink只能是创建者能使用,别的用户使用不了
查看创建的dblink(sys用户)
select * from dba_db_links;
创建dblink
CREATE [PUBLIC] DATABASE LINK link
CONNECT TO username IDENTIFIED BY password
USING 'connectstring'
如果是用sid连接
create database link "dblink"
connect to user
identified by "password"
using 'ip:port:sid'
或者
CREATE DATABASE LINK "dblink"
CONNECT TO user
IDENTIFIED BY "password"
USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT = port)))(CONNECT_DATA = (SID = sid)))';
如果用服务名连接
create database link "dblink"
connect to user
identified by "password"
using 'ip:port/servicename'
或者
CREATE DATABASE LINK "dblink"
CONNECT TO user
IDENTIFIED BY "password"
USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT = port)))(CONNECT_DATA = (SERVERNAME = servicename)))';
查看dblink连接是否成功
select * from dual@link名
删除dblink
DROP DATABASE LINK "[name]";
--或
DROP PUBLIC DATABASE LINK "[name]";
数据库链接的引用
①直接将其放到调用的表名或视图名称后面,中间使用一个 @ 作为分割符
SELECT * FROM table@link;
②对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:
CREATE SYNONYM syn FOR table@link;
③还可以建立一个本地的远程视图,方便使用:
CREATE VIEW view AS SELECT * FROM table@link where… ;
④访问的表不在数据库链接中指定的远程帐户下,但该帐户有访问该表的权限,那么我们在表名前要加上该表的用户名:
SELECT * FROM 库名.table@link ;
查看参数
select * from v$option
select * from v$option WHERE parameter='global_name';--true代表在本地建立的DBLINK的名称必须和远程的Global_name一致才行
select * from v$option where PARAMETER='Advanced replication'--true代表支持高级复制功能
查看数据库全局名称global_names
SELECT * FROM GLOBAL_NAME;