關鍵術語】
Role 角色
Enabling role 角色生效
Disabling role 角色失效
Predefined roles 預定義角色
Application roles 應用角色
Default roles 默認角色
● 簡化權限管理:
使用角色可簡化權限管理??梢詫⒁恍嘞奘谟枘硞€角色,然后將該角色授予每個用戶,而不是將同一組權限授予多個用戶。
● 動態進行權限管理:
如果修改了與某個角色關聯的權限,則授予該角色的所有用戶都會立即自動獲得修改過的權限。
● 有選擇地使用權限:
通過啟用或禁用角色可以暫時打開或關閉權限。啟用角色還可以用來驗證用戶是否已授予該角色。
當建立用戶時,用戶沒有任何權限。為使用戶可以連接到數據庫并執行各種操作,必須 為其授予相應的系統權限或對象權限。假定要使用戶 A、B、C 能夠連接到數據庫,并具有創建表的權限和可以在 SCOTT.EMP 表上執行 INSERT、UPDATE 操作,那么需要進行 12次授權操作。如圖 P1-1 所示。
如果將來要收回用戶 A、B、C 的 INSERT ON SCOTT.EMP 權限,則分別需要從每個用 戶處收回該權限,共需要三次收回權限的操作。
因為用戶 A,B,C 具有相似的權限需求,我們可以通過角色簡化授權和收權操作的次數。假定使用角色,首先可以將這四種權限授予角色 OE,然后將該角色分別授予 A,B,C 用戶,只需要進行 7 次授權操作,顯然可以降低授權次數。如圖 P1-2 所示。
如果要回收用戶 A、B、C 的 INSERT ON SCOTT.EMP,那么只需要從角色 OE 處收回INSERT ON SCOTT.EMP 對象權限就可以了。
所以,角色使得權限的授予和回收變得方便和簡化了。
結論:
在大多數系統中,將必需的權限一個一個授予每一個用戶是很耗時的工作,而且很有可
能會出錯。Oracle 軟件通過角色可實現簡單且受控的權限管理。角色是可授予用戶或其它
角色的、由相關權限組成的一些命名組。角色的設計目的是為了簡化數據庫中的權限管理,
從而可提高數據庫的安全性。
角色特性:
角色是一組相關權限的命名集合,使用角色最主要的目的是簡化權限管理。當建立數據
庫、安裝了數據字典和 PL/SQL 包之后,Oracle 會自動建立一些預定義角色。下面介紹一
些 Oracle 常用的預定義角色:
功能角色
已經創建了一些授權您管理特殊功能的其它角色(如果已安裝這些功能)。例如,
XDBADMIN 包含管理擴展標記語言(XML) 數據庫(如果已安裝此功能)所需的權限。
AQ_ADMINISTRATOR_ROLE 提供管理高級隊列的權限。HS_ADMIN_ROLE 包括管理異種服務所需的權限。在沒有 Oracle 技術支持協助的情況下,一定不能改變授予這些功能角色的權限,因為這樣做可能會無意禁用所需的功能
? Oracle 10g R2之前:
? Oracle 10g R2之后:
oracle CONNECT 角色現在只有這一個權限: CREATE SESSION
如果想還原原來的 oracle CONNECT 角色的設置,Oracle 提供了下面的腳本:
$ORACLE_HOME/rdbms/admin/rstrconn.sql.
從 role_sys_privs 中看 ORACLE resource 角色的權限:
SQL> select PRIVILEGE from role_sys_privs where role='RESOURCE';
當把 ORACLE resource 角色授予一個 user 的時候,不但會授予 ORACLE resource 角色
本身的權限,而且還有 unlimited tablespace 權限。
1 SQL> conn desk 2 Enter password: 3 Connected. 4 SQL> select PRIVILEGE from user_sys_privs; 5 no rows selected 6 SQL> conn / as sysdba 7 Connected. 8 SQL> grant resource to desk; 9 Grant succeeded. 10 SQL> conn desk 11 Enter password: 12 Connected. 13 SQL> select PRIVILEGE from user_sys_privs; 14 PRIVILEGE 15 ---------------------------------------- 16 UNLIMITED TABLESPACE 17 SQL> 18 當把 resource 授予一個 role 時,就不會授予 unlimited tablespace 權限 19 SQL> show user 20 USER is "SYS" 21 SQL> create role testrole identified using testrole; 22 Role created. 23 SQL> revoke resource from desk; 24 Revoke succeeded. 25 SQL> grant resource to testrole; 26 Grant succeeded. 27 SQL> grant testrole to desk; 28 Grant succeeded. 29 SQL> conn desk 30 Enter password: 31 Connected. 32 SQL> select privilege from user_sys_privs; 33 no rows selected 34 SQL>
DBA 是在建立數據庫時 Oracle 執行腳本 SQL.BSQ 自動建立的角色,該角色具有所有 系統權限以及 WITH ADMIN OPTION 選項。
要注意的是,CONNECT、RESOURCE、DBA 三種角色是為與先前版本兼容而保留的, 在將來版本中可能不會自動建立。
EXP_FULL_DATABASE 角色是在安裝數據字典時執行 CATEXP.SQL 腳本建立的角色,
該角色用于執行數據庫的完全導出和增量導出操作,并且它包含以下一些權限和角色:
系統權限 SELECT ANY TABLE、BACKUP ANY TABLE、EXECUTE ANY PROCEDURE、
EXECUTE ANY TYPE、ADMINISTER RESOURCE MANAGER,在表 SYS.INCVID、SYS.
INCFIL 以 及 SYS . INCEXP 上 的 INSERT 、 DELETE 和 UPDATE 對 象 權 限 , 以 及
EXECUTE_CATALOG_ROLE 和 SELECT_CATALOG_ROLE 角色。
IMP_FULL_DATABASE 角色也是在安裝數據字典時執行 CATEXP.SQL 腳本建立的角
色,該角色用于執行完全數據庫導人操作,它包含了 EXECUTE CATALOG ROLE 和
SELECT_CATALOG_ROLE 角色以及大量系統權限(查詢 DBA_ SYS_ PRIVS)。
DELETE_CATALOG_ROLE 是在建立數據庫時 Oracle 執行 SQL.BSQ 自動建立的角色,該角色提供了在系統審計表 SYS.AUD$上的 DELETE 對象權限。
EXECUTE_CATALOG_ROLE 是在建立數據庫時 Oracle 執行 SQL.BSQ 自動建立的角
色,該角色提供了對所有系統 PL/SQL 包的 EXECUTE 對象權限。
SELECT_CATALOG_ROLE 是在建立數據庫時 Oracle 執行 SQLBSQ 自動建立的角色,
該角色提供了在所有數據字典上的 SELECT 對象權限。
盡管在設計應用時可以直接使用預定義角色,但出于安全考慮,Oracle,建議使用自定
義角色。建立角色是使用命令 CREATE ROLE,由 DBA 來完成的,但如果要以其他用戶身
份建立角色,那么要求該用戶必須具有 CREATE ROLE 系統權限。
采用不驗證方式建立的角色,只是在數據字典中存放角色名稱的信息,并且在使角色生
效時不需要進行任何檢查。
【實例 1-1】創建不需要驗證的角色 oe_clerk。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)創建角色 SOL>CREATE ROLE oe_clerk; 角色已創建
與用戶類似,角色也可以進行驗證,以確保角色的安全性。
數據庫驗證是指使用數據庫檢查角色及其口令的方式。當采用這種方式時,角色名及口
令是存放在數據庫中的。當使角色生效時,必須提供口令。
【實例1-2】創建數據庫驗證的角色 hr_clerk。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA已連接。 2)創建角色 SOL>CREATE ROLE hr_clerk IDENTIFIED BY bonus; 角色已創建
外部驗證是指使用操作系統服務或網絡服務檢查角色的方式。
【實例 1-3】創建外部驗證的角色 hr_manager。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)創建角色 SOL>CREATE ROLE hr_manager IDENTIFIED EXTERNALLY; 角色已創建
通過使用應用角色可以避免激活角色,采用這種方式建立角色之后,使角色生效是由認
證包來完成的。
【實例 1-4】創建應用角色 admin_role。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)創建角色 SOL>CREATE ROLE admin_role IDENTIFIED USING hr.pcrt; 角色已創建
其中 USING 子句用于指定認證包。當建立了應用角色 admin_role 之后,該角色可以由
HR 用戶的 pcrt 包中的任何過程或函數激活。
角色創建后,角色沒有任何權限。為了使得角色分配給用戶后,用戶具有相應權限,就
必須為角色授予系統權限或對象權限。給角色授權與給用戶授權的方法完全相同。
【實例1-5】給角色授系統權限。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)角色授權 SOL>GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO oe_clerk WITH ADMIN OPTION; 授權成功。
這樣,當用戶具有角色 oe_clerk 時,該用戶就可以連接到數據庫,并能創建表。另外,
因為在授予這些系統權限時帶有 WITH ADMIN OPTION 選項,所以具有該角色的用戶還可
以將這些系統權限授予其他用戶或角色。
注意,UNLIMITED TABLESPACE 系統權限不能被授予角色;當將對象權限授予角色
時,不能帶有 WITH GRANT OPTION。
用控臺創建角色的步驟如下:
分配角色是指將角色分配給某用戶。在建立了角色并為其授予了權限之后,必須將該角
色分配給用戶,它才能起作用。分配角色與授予系統權限的命令完全相同。當將角色分配給
用戶時,用戶將具有角色的所有系統權限和對象權限。一般情況下,分配角色是由 DBA 來
完成的,如果要以其他用戶身份分配角色,則要求該用戶必須具有 GRANT ANY ROLE 系
統權限或角色的 WITH ADMIN OPTION 選項。
【實例 1-6】把角色 oe_clerk 分配給用戶 devp。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)分配角色 SOL>GRANT oe_clerk TO devp ; 授權成功。 2)創建表 SQL>connect devp/development 已連接。 SQL>CREATE TABLE tt(a int); 表已創建。
把角色分配給 devp 用戶后,用戶 devp 就具有角色的所有權限了。
【實例 1-7】把角色 hr_manager 分配給用戶 devp。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)分配角色 SOL>GRANT hr_manager TO devp WITH ADMIN OPTION; 授權成功。
這里,在分配角色時使用了 WITH ADMIN OPTION 選項,這樣該用戶將具有如下權利:
因此,在為用戶分配角色時應當謹慎使用 WITH ADMIN OPTION 選項,因為該用戶將對角色具有完全控制能力。
以下是使用控制臺分配角色的步驟:
默認角色是用戶所具有的角色的子集,當為用戶指定了默認角色后,以該用戶身份登錄
時會自動激活其默認角色,即用戶具有了角色的權限。當我們為用戶分配了角色之后,只要
沒有用 ALTER USER …DEFAULT ROLE 作過修改,那么這些角色都是用戶的默認角色。但
有時要把某些角色設為默認角色,有些角色不是默認角色,就要用命令顯式設定。設置默認
角色一般是由 DBA 來完成的,如果要以其他用戶身份設置用戶的默認角色,則要求該用戶
必須具有 ALTER USER 系統權限。
使用 ALTER USER 命令可以把一個用戶的所有角色都設置為默認角色,這樣,當以該
用戶身份登錄之后,系統會自動激活該用戶的所有角色,用戶就具有了角色的所有權限。
【實例 1-8】把用戶 devp 的所有角色都設置為默認角色,并查看該用戶當前激活的角色。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)設置默認角色 SOL>ALTER USER devp DEFAULT ROLE ALL; 用戶已更改。 3)以 devp 帳戶登錄 SOL>connect devp/development 已連接。 4)查看 devp 用戶當前激活的角色 SOL>SELECT * FROM session_roles; ROLE ------------ HR_CLERK OE_CLERK
在為用戶分配了多個角色之后,可以明確指明多數角色為默認角色,使少數幾個角色成
為非默認角色。
【實例 1-9】指定除某些角色外其他角色都為默認角色,并驗證。
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)設置默認角色 SOL>ALTER USER devp DEFAULT ROLE ALL EXCEPT hr_manager; 用戶已更改。 3)以 devp 帳戶登錄 SQL>connect devp/development 已連接。 4)驗證 devp 權限 SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或視圖不存在
因為未將 hr_manager 角色設置為 devp 用戶的默認角色,所以以 devp 用戶身份登錄后 不會激活 hr_manager 角色。此時該用戶將不能執行 hr_manager 角色所具有的權限操作。
在為用戶分配了多個角色之后,如果只是要將少數角色設置為默認角色,那么可以使用
如下方法。
【實例 1-10】把用戶 devp 的某些角色設置為默認角色
1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)設置默認角色 SOL>ALTER USER devp DEFAULT ROLE oe_clerk; 用戶已更改。 SQL>connect devp/development 已連接。 3)驗證角色 SOL>SELECT * FROM session_roles; ROLE ------------ OE_CLERK SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或視圖不存在
因為用戶 devp 的默認角色被設置為 oe_clerk,所以,以 devp 用戶身份登錄后只會激活角色 oe_clerk,并且只能執行這種角色所允許的權限操作。
在建立了用戶之后,可以指定用戶無任何默認角色。方法如下:
SOL>connect / AS SYSDBA 已連接。 SOL>ALTER USER alex DEFAULT ROLE NONE; 用戶已更改。
因為沒有給 Alex 用戶設置默認角色,所以以 Alex 用戶身份登錄之后不會激活任何角色,從而使得該用戶不能執行任何角色所具有的權限操作。
寫在最后的話
感謝各位的支持與閱讀,后續會繼續推送相關知識和交流,歡迎交流、轉發和關注,感謝
一、環境
二、下載安裝
啟動成功
安裝社區推薦的插件
安裝完成
除了放在servlet 容器,也可以通過java -jar jenkins.war & 的方式啟動。
如果插件安裝失敗的話,可以去鏡像地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/
手動下載然后通過插件管理中的高級選擇進行上傳
上傳插件
三、全局工具配置
在Jenkins 中的全局工具配置中,配置
四、Github 配置
在Jenkins 訪問Github 項目的時候,有時需要授權,為了保險 所以我們在Github上給Jenkins 生成一個令牌(Personal access tokens)。
1、生成 Personal access tokens
生成token令牌
生成token的選項
生成token成功,記錄字符串下來,后面用到
2、生成憑據
這個就需要上面生成的token
3、配置Jenkins 的Github Server
進入Jenkins 的系統設置
點擊連接測試,出來limit:數字,說明成功
五、構建任務
準備工作都準備好了,開始構建吧。
jenkins-build.png
1、手動構建
這個的意思就是,當你推送代碼了,但是Jenkins不會幫你立即部署,需要你主動去點一下構建
當多人開發的時候,沒人都推送了才去手動構建也是一個好的方式。缺點:不夠自動唄,別急后面有自動
示例圖片如下
示例圖.png
maven,與shell配置示例圖.png
BUILD_ID=DONTKILLME 這行是必不可少的,否則會jenkins會殺掉shell進程,導致自動部署失敗。
上面保存之后,點擊構建,去看看控制臺打印
Started by rstyro 這個是通過用戶觸發的,也就是用戶手動構建的
構建成功
test_run.sh 內容如下
#!/bin/bash BUILD_ID=DONTKILLME # jenkins 構建之后的jar 根路徑 JAR_PATH="/root/.jenkins/workspace/test2" # 項目 打包之后的路徑 PROJ_PATH="/data/jar" # 打包后的名稱 JAR_NAME="springboot-test" # 文件的后綴 FILE_TYPE="jar" # 備份的文件夾名稱 BACKUP="backup" ### base函數 kill() { pid=`ps -ef | grep $JAR_NAME.$FILE_TYPE |grep -v color |grep -v grep | awk '{print $2}'` echo "$JAR_NAME pid is ${pid}" if [ "$pid"="" ] then echo "no $JAR_NAME pid alive" else echo "killing start" sudo kill -9 $pid echo "killing end" fi } #停止之前的進程 echo "killing before" kill echo "killing after" #創建備份目錄 cd $PROJ_PATH if [ ! -d "$BACKUP" ];then sudo mkdir -p $BACKUP cd $BACKUP sudo mkdir log fi echo $PROJ_PATH cd $PROJ_PATH #創建運行目錄 if [ ! -d run ];then sudo mkdir -p run fi #備份之前的版本 cd $PROJ_PATH/run if [ -f "$JAR_NAME.$FILE_TYPE" ];then sudo mv $JAR_NAME.$FILE_TYPE $PROJ_PATH/$BACKUP/$JAR_NAME$(date "+%Y%m%d%H%M%S").$FILE_TYPE fi if [ -f "print.out" ];then sudo mv print.out $PROJ_PATH/$BACKUP/log/print$(date "+%Y%m%d%H%M%S").out fi #將打包好的文件移動到run上 cd $JAR_PATH if [ -d target ];then cd target sudo mv $JAR_NAME.$FILE_TYPE $PROJ_PATH/run/$JAR_NAME.$FILE_TYPE cd ../ fi #啟動服務 cd $PROJ_PATH/run nohup java -jar $JAR_NAME.$FILE_TYPE >print.out 2>&1 &
這個腳本不是很難,學過點shell都會,這個不適合,你就改就ok了,只是示例
2、自動構建
webhooks 連接成功
配置觸發器為webhooks
然后修改代碼,看看是否會自動構建
Started by GitHub push by rstyro 這個打印說明通過Github 推送自動觸發的,說明Webhooks 配置成功。搞定
六、用戶權限管理
1、配置步驟
jenkins-auth.png
2、管理分配角色
jenkins-auth-role.png
jenkins-auth-role-manage.png
jenkins-auth-role2.png
jenkins-auth-role3.png
3、角色選項說明
ok,基本上夠用了,一通百通。上面以Github為例,其他的也差不多?。。?/p>