Oracle 19C學習 - 12. 用戶與權限管理


ORACLE數據庫兩種安全驗證模式

1. 操作系統認證

我們可以將Linux的用戶加入到oinstall,dba組中,然后在Oracle本地登陸或者使用遠程登陸,可以作為sysdba登錄,在數據庫級不需要提供密碼(具體操作見附1)。

SQLPLUS / as SYSDBA

 

Linux默認支持操作系統認證,要關閉操作系統驗證,可以:

  • 在$ORACLE_HOME/network/admin目錄下創建sqlnet.ora,添加:SQLNET.AUTHENTICATION_SERVICES = (NONE)。
  • 取消用戶的dba和oinstall組。

 2. 口令認證

Oracle的口令文件存放所有sysdba或者sysoper權限的用戶的口令,如果想以sysdba權限遠程連接數據庫,必須使用口令文件,否則不能連上。

使用口令文件的好處是即使數據庫不處於open狀態,依然可以通過口令文件驗證來連接數據庫。

安裝完oracle,口令文件中只存放了sys的口令。如果之后把sysdba權限授予了普通用戶,那么此時會把普通用戶的口令從數據庫中讀到口令文件中保存下來,這時要求數據庫處於open狀態。

 重新建立口令文件

orapwd file=$ORACLE_HOME/dbs/orapw$ORACL_SID password=oracle force=y format=12  --format=12支持弱口令。

REMOTE_LOGIN_PASSWORDFILE參數

REMOTE_LOGIN_PASSWORDFILE參數增強系統的安全性,所謂提高安全性就是禁止以SYSDBA或SYSOPER特權用戶從客戶端登陸到數據庫系統中。

show parameter remote_login_passwordfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      EXCLUSIVE

 

  • EXCLUSIVE:允許客戶端以SYSDBA或SYSOPER權限登錄到數據庫實例中完成數據庫管理操作;
                            允許授予和回收SYSDBA或SYSOPER權限。(允許你在sys用戶下使用alter user sys identified by xxx;給sys用戶修改密碼的)
  • NONE:禁止客戶端以SYSDBA或SYSOPER權限登錄到數據庫實例中完成數據庫管理操作;
                 禁止授予和回收SYSDBA或SYSOPER權限。
  • SHARED:允許客戶端以SYSDBA或SYSOPER權限登錄到數據庫實例中完成數據庫管理操作;
                      禁止授予和回收SYSDBA或SYSOPER權限。(不允許你在sys用戶下使用alter user sys identified by xxx;給sys用戶修改密碼的)

 使用alter system命令更改,因為修改的是SPFILE,所以修改后,需要重新啟動數據庫才能看到效果。

SQL> alter system set remote_login_passwordfile=shared scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL
> startup ORACLE instance started. SQL> show parameter remote_login_passwordfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ remote_login_passwordfile string SHARED

 

 權限Privilege

  • 系統權限:獲得訪問數據庫的權限 並且能執行特定DDL操作
  • 對象權限:處理數據庫對象的內容 比如說SELECT UPDATE INSERT 

 

系統權限
方案/模式(SCHEMA):對象的集合,例如表、視圖、序列和同義詞的集合,並且SCHEMA和USER是同名。

 系統權限示例

      -- CREATE SESSION  創建會話
      -- CREATE TABLE    創建表
      -- CREATE SEQUENCE 創建序列
      -- CREATE VIEW     創建視圖
      -- CREATE PROCEDURE 創建存儲過程

 創建用戶: CREATE USER USER_NAME IDENTIFIED BY PASSWORD;

 刪除用戶:DROP USER USER_NAME;

 

為用戶授予系統權限 GRANT 權限 TO USER.

為用戶取消系統權限 REVOKE 權限 FROM USER

--授權
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW
TO scott; Grant succeeded.
--取消授權
REVOKE CREATE SEQUENCE, CREATE VIEW FROM scott;

 

 查看某個用戶當前的系統權限:(用戶名請使用大寫並在sys用戶下執行)

SELECT grantee, privilege FROM dba_sys_privs WHERE GRANTEE = 'SCOTT';   --scott要大寫

GRANT PRIVILEGE
----- ----------------------------------------
SCOTT CREATE TABLE
SCOTT CREATE SESSION

 

 對象權限

用戶在自己的SCHEMA中具有所有的對象的權限。用戶可以授權給任何其他用戶或角色。

不同類型的方案對象(SCHEMA)具有不同的對象權限。

 

對象權限特點:

  •  對象權限會根據對象的不同而變化。
  •  對象的所有者對其具有全部權限。
  •  所有者可以將屬於他的對象權限授予其他用戶。

對象權限

 

 對象權限授權實例

 

HR用戶賦予對象權限給SCOTT用戶

GRANT SELECT, UPDATE
ON employees
TO scott;

Grant succeeded.

 

 

查看用戶的對象權限

--查scott用戶權限,就在scott用戶下進行
COL grantee FOR a20 COL owner FOR a20 COL table_name FOR a20 COL privilege FOR a20
set lines 200 set pages 200 SELECT grantee, owner, table_name, privilege FROM user_tab_privs WHERE grantee='SCOTT'; GRANTE OWNER TABLE_NAME PRIVILEGE ------ -------------------- -------------------- -------------------- SCOTT HR EMPLOYEES SELECT SCOTT HR EMPLOYEES UPDATE

 

 

 撤銷對象權限

 CASCADE  如果要刪除通過REFERENCES權限對該對象實行的
 CONSTRAINTS  任何引用完整性約束,則此項是必須的

REVOKE SELECT,UPDATE
ON employees
FROM scott;

Revoke succeeded.

 

 WITH ADMIN OPTION(系統權限)

被授予該權限的用戶有權將某個他已有的系統權限授予其他用戶或角色。

他有兩個特點:

  1. 如果用戶使用WITH ADMIN OPTION為某個用戶授予系統權限,取消父用戶的系統權限並不會級聯取消子用戶的權限。

  2. 系統權限無級聯,即A授予B系統權限,B授予C系統權限,如果A收回B的系統權限,C的系統權限不受影響;系統權限可以跨用戶回收,即A可以直接收回C用戶的權限。

 

 

 

SYS:
GRANT CREATE SESSION TO LEO
WITH ADMIN OPTION;

LEO:
GRANT CREATE SESSION TO KEVIN;

REVOKE LEO的權限不影響Kevin的登陸。
Kevin無法給其他用戶授權CREATE SESSION,提示權限不夠。

 

 

WITH GRANT OPTION(對象權限)

 授予該權限的用戶有權將對象權限授予其他用戶或角色。

如果取消父用戶的對象權限,那么對於這個用戶使用WITH GRANT OPTION授予權限的用戶來說,取消WITH GRANT OPTION授權是級聯的。

 

 

 

HR:
GRANT SELECT
ON EMPLOYEES
TO leo
WITH GRANT OPTION;

LEO:
GRANT SELECT
ON hr.employees
TO KEVIN;

--revoke leo的權限會同樣revoke掉kevin的權限。revoke后,kevin進行查詢會提示沒有表或者視圖

 

 角色 ROLE

可以創建角色,並分配系統權限與對象權限,然后再將角色分配給用戶。

常見的預定義角色: CONNECT, RESOURCE, DBA等。

--創建角色
CREATE ROLE service_leader;

CREATE ROLE manager IDENTIFIED BY oracle;
--為角色分配系統權限 GRANT create session, create table, create view TO service_leader; --為角色分配對象權限 GRANT select ON hr.employees TO service_leader; --查看角色的系統權限 SELECT * FROM role_sys_privs WHERE role='SERVICE_LEADER'; --查看角色的對象權限 SELECT * FROM dba_tab_privs WHERE GRANTEE='SERVICE_LEADER';

--刪除角色
DROP ROLE service_leader;

--一個組可以授權給另外一個組
SQL> GRANT DBA TO service_leader;
Grant succeeded.

--SYSDBA和SYSOPER無法再被授權
SQL> GRANT SYSDBA TO service_leader;
ERROR at line 1:
ORA-01931: cannot grant SYSDBA to a role

SQL> GRANT SYSOPER TO service_leader;
ERROR at line 1:
ORA-01931: cannot grant SYSOPER to a role

 

DBLINK數據庫連接
允許本地用戶訪問遠程數據庫中的數據。服務器提前與遠程服務器建立鏈接。

 

第一種:私有數據庫連接(需要CREATE DATABAS LINK權限)
CREATE DATABASE LINK hr_19c CONNECT TO hr IDENTIFIED BY "hr" USING '192.168.16.66:1521/orcl';
注: hr/hr是遠程服務器的用戶名和密碼; 192.168.16.66是遠程的服務器;orcl是實例名

第二種:公共數據庫連接(需要CREATE PUBLIC DATABAS LINK權限)
CREATE PUBLIC DATABASE LINK hr_19c_P CONNECT TO hr IDENTIFIED BY "hr" USING '192.168.16.66:1521/orcl';
注: hr/hr是遠程服務器的用戶名和密碼; 192.168.16.66是遠程的服務器;orcl是實例名

 

--用戶需要有CREATE DATABASE LINK的權限或者CREATE PUBLIC DATABASE LINK的權限。
GRANT CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK TO hr;

--刪除建立的DATABASE LINK,用戶創建的私有dblink,只能在此用戶下刪除,sys看不到。
 DROP DATABASE LINK hr_to_12c;

--刪除PUBLIC DATABASE LINK, 有DROP PUBLIC DATABASE LINK的用戶可以刪除其他人創建的PUBLIC DATABASE LINK.
DROP PUBLIC DATABASE LINK hr_to_12c_p;

 

 

 

 

附1:

1. 環境變量中添加下列語句(root)

vim /etc/profile

if [ $USER = "leo" ]; then
   if [ $SHELL = "/bin/ksh" ]; then
      ulimit -p 16384
      ulimit -n 65536
      else
      ulimit -u 16384 -n 65536
   fi
fi

source /etc/profile

 

useradd -g oinstall -G dba,oper leo

passwd leo

 

su - leo

vim .bash_profile

export EDITOR=vi
export TMP=/tmp  
export TMPDIR=$TMP
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/db_1
export INVENTORY_LOCATION=/u01/oraInventory
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:$HOME/bin
umask 022

source .bash_profile

 

至此,leo用戶可以使用數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM