PUBLIC ユーザー・グループとは

PUBLIC とはマニュアル上では 「特別なユーザー・グループ*1」と記載されている。
CREATE PUBLIC 〜 の場合にはキーワードとして覚える方が便利かもしれないが 「PUBLIC ロール」に権限を付与する GRANT .. TO PUBLIC などを含めると PUBLIC というユーザー・グループが管理していると思った方が理解しやすい。

実際、一部の開発ツールでは PUBLIC は ユーザー として閲覧できる。しかし PUBLIC は スキーマ を所有していない。 ただ、他のユーザーの スキーマ・オブジェクト のオブジェクト権限などを 全ユーザーに付与 という意味を含めて仮想的なユーザー?の位置付け(ユーザー・グループ)としては好都合な説明であると思う。

PUBLIC ロールの実行権限

以下の権限は取り扱いに注意する ( 標準設定のままでは問題になる可能性がある )

要注意権限危険性
CREATE DBLINKリモートからデータの収集
(CONNECT ロールに含まれる、ロールからは個別に剥奪できない)
UTL_MAIL*2メールによるデータの送信(容易に添付ファイルも使用できるパッケージ) Oracle 10g
UTL_SMTPメールによるデータの送信
UTL_TCPTCPによるデータの送信
UTL_HTTPHTMLフォームによるデータの送信
UTL_FILEホストのファイルへのアクセス
DBMS_SQL放置カーソルによる脆弱性の内容と手法が公開された過去がある(Oracle 10g 含む)
DBMS_RANDOM不適切に初期化されることで暗号化に問題が発生する(Oracle 9i まで)

PUBLIC からは削除し、特定のユーザーに個別に許可する。

--  SYSで実行
REVOKE EXECUTE ON UTL_SMTP FROM PUBLIC ; 
REVOKE EXECUTE ON UTL_TCP FROM PUBLIC ;
REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC ;
REVOKE EXECUTE ON UTL_FILE FROM PUBLIC ;
REVOKE EXECUTE ON DBMS_SQL FROM PUBLIC ;
REVOKE EXECUTE ON DBMS_RANDOM FROM PUBLIC ;

権限状態の確認 SQL

SELECT *
  FROM
	DBA_TAB_PRIVS
 WHERE
	PRIVILEGE     = 'EXECUTE'
	AND GRANTEE   = 'PUBLIC'
	AND TABLE_NAME IN(
	                'UTL_SMTP', 'UTL_TCP', 'UTL_HTTP',
	                'DBMS_SQL', 'DBMS_RANDOM'
	) ;

ロール関連事項

PUBLIC シノニム

開発するアプリケーションにおいて パブリック・シノニム の利用は控えるようにする。

PUBLIC シノニムを抽出 (システムで定義されたものは除外)

-- ユーザー管理のシノニム
SELECT *
FROM
	USER_SYNONYMS
;
-- PUBLIC シノニム
SELECT *
FROM
	DBA_SYNONYMS
WHERE
	OWNER = 'PUBLIC'
	AND NOT TABLE_OWNER IN (
	 'SYS', 'SYSMAN', 'SYSTEM'
	,'WMSYS', 'EXFSYS', 'ORDSYS'
	,'MDSYS', 'XDB'
);


シノニム関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト

*1 そういえば、普通のユーザーグループなどあったのだろうか? Oracle でユーザー・グループという概念がでてくるのはインフラの環境を除いて他に記憶が無い。
*2 デフォルトでインストールされない。$ORACLE_HOME/rdbms/admin/utlmail.sql、/prvtmail.plbを実行する必要がある。