Oracle创建用户并给用户授权查询指定表或视图的权限

标签:
股票 |
分类: Database |
用DNINMSV31账户登录数据库进行如下操作:
CREATE USER
GRANT "CONNECT"
TO
ALTER USER
GRANT CREATE
GRANT SELECT ON "DNINMSV31"."V_DNDEVICE"
TO
GRANT SELECT ON "DNINMSV31"."V_DNSUBNE"
TO
GRANT SELECT ON "DNINMSV31"."V_DNPACKAGE"
TO
GRANT SELECT ON "DNINMSV31"."V_DNPORT"
TO
【注】:在用NORTHBOUND登录后查询的时候要在视图前加上DNINMSV31,否则会报表或视图不存在。
创建同义词供对方公司系统访问:
CREATE
CREATE
CREATE
CREATE
第三方的系统直接通过这个同义词就可以访问到用户DNINMSV31中的视图。这也是对系统安全的一种保护措施。第三方系统登录后,只能看到其同义词,其他的都不会访问得到。
最后还要对NORTHBOUND用户进行连接数的限制,以免第三方无限制的连接数据库,造成数据库SESSION暴涨:
conn / as
alter system set resource_limite=true scope=both sid='*';
新建profile, 初始限制为1 ,用于测试。
create
alter user
将会话数调整到30
alter
--------------------------------------------------------------------------------------------------
跟第三方做接口程序时给对方开放只能查询某些视图用户的步骤如下:
我们有这样一个需求:在数据库中建立两个用户,用户A
这个用户B
这种需求在很多行业的应用中都很常见。假如这是一道面试题,您该如何去回答呢?
我采用下面的方法来回答这个问题。
第一步,创建新用户A
这里用户名称分别为ryd_interface_src
drop user ryd_interface_src cascade;
create user ryd_interface_src identified by ryd_interface_src;
grant connect,create view to ryd_interface_src;
drop user ryd_interface cascade;
create user ryd_interface identified by ryd_interface;
grant connect,create synonym to ryd_interface;
第二步,登录数据库一个模式中,授权给用户A
conn qlzqclient/qlzq+client8
grant select on
INVEST_CLOCK
grant select on
INVEST_LOG
这里授权方法加了一个with grant option
第三步,登录数据库用户A
conn ryd_interface_src/ryd_interface_src
create or replace view run_views as
select id as doc_id, title,fbsj as upload_date,'' as branch_code from qlzq.runs_lantern@CLIENT_QLZQWEB
where EXT1='1' and sysdate
>
and sysdate < SOLID_TIME
union
select
a.doc_id,a.title,a.upload_date,a.branch_code
left
where
a.state =1 and a.is_delete =0
and
and
create or replace view INVEST_CLOCK_VIEWS as
select
create or replace view INVEST_LOG_VIEWS as
select
第四步,在数据库用户A
因为在步骤二中,加了with grant
option
grant select on INVEST_CLOCK_views to ryd_interface;
grant select on INVEST_LOG_views to ryd_interface;
grant select on run_views to ryd_interface;
第五步,在数据库用户B
conn ryd_interface/ryd_interface
select count(*) from ryd_interface_src.run_views;
select count(*) from ryd_interface_src.INVEST_CLOCK_views;
select count(*) from ryd_interface_src.INVEST_LOG_views;
create synonym
create
synonym
create
synonym
第三方的系统直接通过这个同义词就可以访问到用户A
第六步,限制资源使用
因为用户B
话数做一个限制。
这里采用profile
conn / as sysdba
alter system set resource_limite=true scope=both sid='*';
新建profile,
create profile third_user limit SESSIONS_PER_USER 1 FAILED_LOGIN_ATTEMPTS unlimited;
alter user ryd_interface profile third_user;
将会话数调整到30
alter profile third_user limit SESSIONS_PER_USER 30;
通过以上操作,我们就可以实现这个需求了。
--------------------------------------------------------------------------------------------------
GRANT debug any procedure, debug connect session TO hnckb;
grant select on sys.dba_pending_transactions to hnckb;
grant CREATE VIEW,CREATE JOB,CREATE SYNONYM to hnckb;
grant CONNECT,RESOURCE to hnckb;
1.标准角色
CONNECT
RESOURCE
2.系统权限
CREATE VIEW
CREATE DATABASE LINK
CREATE JOB
CREATE SYNONYM
UNLIMITED TABLESPACE
更改定额
命令:ALTER USER 名称 QUOTA 0 ON 表空间名
ALTER USER 名字 QUOTA (数值)K|M|UNLIMITED ON 表空间名;
使用方法:
A、控制用户数据增长
B、当用户拥有一定的数据,而管理员不想让他在增加新的数据的时候。
C、当将用户定额设为零的时候,用户不能创建新的数据,但原有数据仍可访问。
3.对象权限
DBA_PENDING_TRANSACTIONS
(SELECT)
grant select on sys.dba_pending_transactions to user;
4.建议开放
DEBUG CONNECT
SESSION
例如:
GRANT debug any procedure, debug connect session TO hr;
Oracle创建表空间、创建用户、授权、授权对象的访问以及查看权限
1.创建临时表空间
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结
果进行排序。
临时表空间的主要作用:
索引create或rebuild
Order by 或 group by
Distinct 操作
Union 或 intersect 或 minus
Sort-merge joins
CREATE TEMPORARY TABLESPACE “TEST_TEMP”
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
2.创建用户表空间
CREATE TABLESPACE “TEST_DATA”
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
3.创建用户并设置其表空间
username:usertest
password:userpwd
CREATE USER usertest IDENTIFIED BY userpwd
DEFAULT TABLESPACE TEST_DATA
TEMPORARY TABLESPACE TEST_TEMP;
4.给用户授权
GRANT
CREATE SESSION, CREATE ANY TABLE, CREATE ANY VIEW ,CREATE ANY
INDEX, CREATE ANY PROCEDURE,
ALTER ANY TABLE, ALTER ANY PROCEDURE,
DROP ANY TABLE, DROP ANY VIEW, DROP ANY INDEX, DROP ANY
PROCEDURE,
SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY
TABLE
TO username;
首先授权用户testuser两个基本的角色权限
CONNECT角色:
RESOURCE角色:
授权角色给用户的sql语句:
GRANT role TO username;
5.查看用户权限
查看所有用户
SELECT * FROM DBA_USERS;
SELECT * FROM ALL_USERS;
SELECT * FROM USER_USERS;
查看用户系统权限
SELECT * FROM DBA_SYS_PRIVS;
SELECT * FROM USER_SYS_PRIVS;
查看用户对象或角色权限
SELECT * FROM DBA_TAB_PRIVS;
SELECT * FROM ALL_TAB_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
查看所有角色
SELECT * FROM DBA_ROLES;
查看用户或角色所拥有的角色
SELECT * FROM DBA_ROLE_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
遇到no privileges on tablespace ‘tablespace ‘
alter user userquota 10M[unlimited] on tablespace;
创建用户和表空间:
1、登录linux,以oracle用户登录(如果是root用户登录的,登录后用
su - oracle命令切换成oracle用户)
2、以sysdba方式来打开sqlplus,命令如下: sqlplus /
as sysdba
3、创建临时表空间:
--查询临时表空间文件的绝对路径。如果需要的话,可以通过查询来写定绝对路径。一般用${ORACLE_HOME}就可以了 select name from v$tempfile; create temporary tablespace NOTIFYDB_TEMP tempfile '${ORACLE_HOME}\oradata\NOTIFYDB_TEMP.bdf' size 100m reuse autoextend on next 20m maxsize unlimited;
4、创建表空间:
--查询用户表空间文件的绝对路径: select name from v$datafile; create tablespace NOTIFYDB datafile '${ORACLE_HOME}\oradata\notifydb.dbf' size 100M reuse autoextend on next 40M maxsize unlimited default storage(initial 128k next 128k minextents 2 maxextents unlimited);
5、创建用户和密码,指定上边创建的临时表空间和表空间
create user hc_notify identified by hc_password default tablespace NOTIFYDB temporary tablespace NOTIFYDB_TEMP;
6、赋予权限
grant dba to hc_notify; grant connect,resource to hc_notify; grant select any table to hc_notify; grant delete any table to hc_notify; grant update any table to hc_notify; grant insert any table to hc_notify;
经过以上操作,就可以使用hc_notify/hc_password登录指定的实例,创建我们自己的表了。
删除表空间:
1、查看用户权限
--查看用户要具备drop tablespace的权限,如果没有,先用更高级的用户(如sys)给予授权 select a2.username,a1.privilege from dba_sys_privs a1 , user_role_privs a2 where a1.privilege = 'DROP TABLESPACE' and a1.grantee =a2.granted_role
2、删除临时表空间
--查看临时表空间文件 select name from v$tempfile; --查看用户和表空间的关系 select USERNAME,TEMPORARY_TABLESPACE from DBA_USERS; --如果有用户的默认临时表空间是NOTIFYDB_TEMP的话,建议进行更改 alter user xxx temporary tablespace tempdefault; ---设置tempdefault为默认临时表空间 alter database default temporary tablespace tempdefault; --删除表空间NOTIFYDB_TEMP及其包含数据对象以及数据文件 drop tablespace NOTIFYDB_TEMP including contents and datafiles;
3.删除用户表空间
--查看表空间文件 select name from v$datafile; --停止表空间的在线使用 alter tablespace 表空间名称 offline; --删除表空间NOTIFYDB_TEMP及其包含数据对象以及数据文件 drop tablespace NOTIFYDB_TEMP including contents and datafiles;
Oracle用户权限查询相关操作:
--查看所有的用户 select * from all_users; --查看当前用户信息 select * from user_users; --查看当前用户的角色 select * from user_role_privs; --查看当前用户的权限 select * from user_sys_privs; --查看当前用户的表可操作权限 select * from user_tab_privs; --查看某一个表的约束,注意表名要 大写 select * from user_constraints where table_name='TBL_XXX'; --查看某一个表的所有索引,注意表名要 大写 select index_name,index_type,status,blevel from user_indexes where table_name = 'TBL_XXX'; --查看索引的构成,注意表名要 大写 select table_name,index_name,column_name, column_position FROM user_ind_columns WHERE table_name='TBL_XXX'; --系统数据字典 DBA_TABLESPACES 中记录了关于表空间的详细信息 select * from sys.dba_tablespaces; --查看用户序列 select * from user_sequences; --查看数据库序列 select * from dba_sequences;