ORA 01031 對作為系統使用者的使用者在 ALL_CATALOG 上的 GRANT SELECT 權限不足
命令:
GRANT SELECT ON ALL_CATALOG TO appdbuser *
錯誤:
ERROR at line 1: ORA-01031: insufficient privileges
問題:
我希望我的 Oracle XE
system
使用者(<-important)能夠對 ALL_CATALOG、ALL_CONSTRAINTS、ALL_INDEXES、ALL_OBJECTS、ALL_TABLES、ALL_TAB_COLUMNS 和 ALL_VIEWS 進行 GRANT SELECT。DMBS:Oracle XE 18c(快捷版),版本 18.4
客戶:
SQL Developer 20.2.0.175
並且還與SQL Plus 12.2.0.0
作業系統:Windows 10 Pro Build 18363
使用者和特權:
- 我登錄的 Windows 使用者是域使用者帳戶,它是
Administrators
我機器上 Windows 組的一部分。- 我已經使用我目前登錄的同一使用者在我自己的機器上安裝了這個數據庫。
- 我還驗證了該使用者是否包含在
ORA_DBA
Windows 使用者組中。下圖顯示了我的 Windows 機器上以 ORA 開頭的其他組的列表。4. 我以
system
使用者身份(通過 sqlplus 和 sql developer 嘗試)連接到 Oracle XE DB(可插入 DB而非CDB)。 5. 我使用 sys/password 作為 sysdba 連接到數據庫,並成功執行了以下命令:
GRANT ALL PRIVILEGES TO system;
但 GRANT SELECT ON 命令仍然給出權限不足錯誤。 6. 如果重要,我已經檢查了 NTS 作為身份驗證服務包含在我的 sqlnet.ora 文件中,如下所示:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
7. (EDIT1)根據這個答案,我現在也嘗試過
GRANT ALL PRIVILEGES TO system WITH GRANT OPTION;
這給了我以下錯誤報告
錯誤報告 - ORA-01939:只能指定 ADMIN OPTION 01939。 00000 - “只能指定 ADMIN OPTION” *原因:只能使用 admin 選項授予系統權限和角色。授予選項不能與系統權限和角色一起使用。委託選項不能與系統權限一起使用。*操作:指定管理選項。 8. 7點後,我嘗試了
GRANT ALL PRIVILEGES TO system WITH ADMIN OPTION;
成功,就像格蘭特成功一樣,但我的問題仍然存在。
更多背景
- 此命令是由
SQL
腳本生成的batch
腳本的一部分,我既不想也不能更改,因為更大的團隊使用它並且基於給定的參數,這些腳本已經適用於 MS SQL Server 和 Oracle 12.2.0.1.0在由我們的 IT 維護的 Linux 機器上(但 IT 已對其進行了設置),我們僅為它提供了有限的 (2) 個許可證。因此,我正在我的機器上設置 Oracle XE,並希望某些東西是可重複的,以便其他開發人員可以根據我的經驗來做到這一點。- 當我通過使用系統/密碼作為 sysdba 登錄來執行此腳本時,
GRANT
SQL 腳本中的這些命令有效,但即使此登錄也是在腳本中編碼的,我不想要而且很可能不應該更改。如果我在開發人員使用標準腳本之前為他們提供一個額外的腳本供他們執行,那也沒關係。- 該腳本還在創建使用者,該腳本現在正在向其授予權限。這些 CREATE USER 命令也有錯誤,因為 CREATE USER 命令指定了一個 DEFAULT TABLESPACE user_data 和一個 TEMPORARY TABLESPACEtemporary_data。數據庫抱怨這些在數據庫(xepdb1)中不存在,所以我
system
使用以下命令與使用者一起創建了這些表空間:CREATE TABLESPACE user_data DATAFILE '<ORA_DATA>\XE\XEPDB1\user_data.dbf' SIZE 1M AUTOEXTEND ON NEXT 1M; CREATE TEMPORARY TABLESPACE temporary_data TEMPFILE '<ORA_DATA>\XE\XEPDB1\temporary_data.dbf' SIZE 2M AUTOEXTEND ON NEXT 1M;
該問題已由團隊中的其他人解決,我在提供的設置文件中看到的差異是:
- 以 sys@xepdb1 身份登錄
- 我們現在不創建新表空間,而是使用以下兩個命令重命名 Oracle XE 中的表空間:
將表空間臨時重命名為臨時數據;
ALTER TABLESPACE 使用者重命名為 user_data; 3. 其次,這就是說明如何將 GRANT SELECT ON 權限分別授予系統使用者。
GRANT SELECT ON ALL_CATALOG TO system WITH GRANT OPTION;
要允許使用者
system
授予對它不擁有的對象的權限,請使用GRANT ALL PRIVILEGES TO system WITH GRANT OPTION