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

要注意关闭两台计算机上的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;

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名

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;

posted on 2021-04-28 11:18  飞飞乐园  阅读(574)  评论(0编辑  收藏  举报