Oracleデータベースで既存ユーザーの情報を変更したり、不要になったユーザーを削除する方法を解説します。
ALTER USER文でパスワード変更、アカウントロック/アンロック、デフォルト表領域、クォータ、プロファイルの変更ができ、DROP USER文でユーザーを削除できます。この記事では、権限の付与/取消(GRANT/REVOKE)、ユーザー情報の確認SQL、他RDBMSとの比較、よくあるエラーと対処法まで実務で役立つ内容を網羅します。
ALTER USER の基本構文
ALTER USER 文は、既存ユーザーの属性を変更するためのSQL文です。
ALTER USER 基本構文
ALTER USER ユーザー名
IDENTIFIED BY 新パスワード
DEFAULT TABLESPACE 表領域名
TEMPORARY TABLESPACE 一時表領域名
QUOTA サイズ ON 表領域名
PROFILE プロファイル名
ACCOUNT LOCK | UNLOCK
PASSWORD EXPIRE;
すべてのオプションを同時に指定する必要はなく、変更したい項目だけを指定します。
ポイント:ALTER USER を実行するには ALTER USER システム権限が必要です。自分自身のパスワード変更のみ、権限がなくても実行できます。
パスワードの変更
ユーザーのパスワードを変更するには IDENTIFIED BY 句を使います。
パスワード変更
-- ユーザー SCOTT のパスワードを変更
ALTER USER SCOTT IDENTIFIED BY NewPassword123;
パスワードを即座に期限切れにする
次回ログイン時にパスワード変更を強制するには PASSWORD EXPIRE を使います。
パスワード期限切れ
-- 次回ログイン時にパスワード変更を強制
ALTER USER SCOTT PASSWORD EXPIRE;
注意:PASSWORD EXPIRE を実行すると、ユーザーは次回ログイン時に必ずパスワードを変更する必要があります。バッチ処理やアプリケーション接続で使用しているユーザーに実行すると、接続エラーが発生します。
外部認証・グローバル認証への変更
パスワード認証以外の認証方式に変更することもできます。
認証方式の変更
-- OS認証に変更
ALTER USER SCOTT IDENTIFIED EXTERNALLY;
-- グローバル認証(LDAP等)に変更
ALTER USER SCOTT IDENTIFIED GLOBALLY AS 'CN=scott,OU=Users,DC=example,DC=com';
アカウントのロック/アンロック
セキュリティ上の理由や一時的な利用停止のため、ユーザーアカウントをロック・アンロックできます。
アカウントのロック/アンロック
-- アカウントをロック(ログイン不可にする)
ALTER USER SCOTT ACCOUNT LOCK;
-- アカウントをアンロック(ログイン可能にする)
ALTER USER SCOTT ACCOUNT UNLOCK;
ロックされたアカウントでログインしようとすると、次のエラーが発生します。
ロック時のエラーメッセージ
ORA-28000: The account is locked.
ロック状態の確認
ロック状態の確認
SELECT username, account_status, lock_date
FROM dba_users
WHERE username = 'SCOTT';
| USERNAME |
ACCOUNT_STATUS |
LOCK_DATE |
| SCOTT |
LOCKED |
2026-03-05 10:30:00 |
ACCOUNT_STATUS の主な値は以下のとおりです。
| ステータス |
意味 |
OPEN |
正常(ログイン可能) |
LOCKED |
管理者がロック |
LOCKED(TIMED) |
ログイン失敗回数超過で自動ロック |
EXPIRED |
パスワード期限切れ |
EXPIRED & LOCKED |
パスワード期限切れかつロック |
デフォルト表領域の変更
ユーザーが作成するオブジェクト(テーブル・インデックス等)のデフォルト格納先を変更します。
デフォルト表領域・一時表領域の変更
-- デフォルト表領域を変更
ALTER USER SCOTT DEFAULT TABLESPACE APP_DATA;
-- 一時表領域を変更
ALTER USER SCOTT TEMPORARY TABLESPACE TEMP2;
デフォルト表領域の変更について
- 既に作成済みのオブジェクトは移動されません
- 変更後に新規作成するオブジェクトから適用されます
- 既存オブジェクトを移動する場合は
ALTER TABLE ... MOVE TABLESPACE を使用します
クォータ(表領域の使用量制限)の変更
ユーザーが特定の表領域で使用できる容量の上限を設定します。
クォータの変更
-- 100MBのクォータを設定
ALTER USER SCOTT QUOTA 100M ON APP_DATA;
-- 無制限に設定
ALTER USER SCOTT QUOTA UNLIMITED ON APP_DATA;
-- クォータを0にする(新規オブジェクト作成不可)
ALTER USER SCOTT QUOTA 0 ON APP_DATA;
現在のクォータを確認する
クォータの確認
SELECT tablespace_name,
bytes / 1024 / 1024 AS used_mb,
max_bytes / 1024 / 1024 AS max_mb
FROM dba_ts_quotas
WHERE username = 'SCOTT';
| TABLESPACE_NAME |
USED_MB |
MAX_MB |
| APP_DATA |
25 |
100 |
| USERS |
0 |
-1(無制限) |
max_bytes が -1 の場合は UNLIMITED を表します。
プロファイルの変更(パスワードポリシー等)
プロファイルとは、パスワードポリシーやリソース制限をまとめた設定です。ユーザーのプロファイルを変更すると、そのプロファイルに定義されたルールがユーザーに適用されます。
プロファイルの変更
-- ユーザーのプロファイルを変更
ALTER USER SCOTT PROFILE APP_PROFILE;
プロファイルの作成例
プロファイルの作成(パスワードポリシー)
CREATE PROFILE APP_PROFILE LIMIT
-- パスワード関連
PASSWORD_LIFE_TIME 90 -- パスワード有効期限(日)
PASSWORD_GRACE_TIME 7 -- 猶予期間(日)
PASSWORD_REUSE_TIME 365 -- 同じパスワードを再使用できない期間
PASSWORD_REUSE_MAX 10 -- パスワード履歴の保持数
FAILED_LOGIN_ATTEMPTS 5 -- ログイン失敗許容回数
PASSWORD_LOCK_TIME 1 -- ロック期間(日)
-- リソース関連
SESSIONS_PER_USER 5 -- 同時セッション数
IDLE_TIME 30 -- アイドルタイムアウト(分)
CONNECT_TIME 480 -- 最大接続時間(分)
;
プロファイルの主な設定項目
| パラメータ |
説明 |
デフォルト |
PASSWORD_LIFE_TIME |
パスワードの有効期限(日数) |
180 |
PASSWORD_GRACE_TIME |
有効期限後の猶予期間 |
7 |
PASSWORD_REUSE_TIME |
パスワード再使用禁止期間 |
UNLIMITED |
PASSWORD_REUSE_MAX |
パスワード履歴の保持数 |
UNLIMITED |
FAILED_LOGIN_ATTEMPTS |
ログイン失敗許容回数 |
10 |
PASSWORD_LOCK_TIME |
ロック期間(日数) |
1 |
SESSIONS_PER_USER |
同時接続セッション数の上限 |
UNLIMITED |
IDLE_TIME |
アイドルタイムアウト(分) |
UNLIMITED |
現在のプロファイル設定を確認する
プロファイル設定の確認
SELECT resource_name, limit
FROM dba_profiles
WHERE profile = 'APP_PROFILE'
ORDER BY resource_name;
権限の付与(GRANT)
ユーザーに権限を付与するには GRANT 文を使用します。Oracleの権限はシステム権限、ロール、オブジェクト権限の3種類があります。
システム権限の付与
システム権限の付与
-- 基本的な権限を付与
GRANT CREATE SESSION TO SCOTT;
GRANT CREATE TABLE TO SCOTT;
GRANT CREATE VIEW TO SCOTT;
-- 複数権限を一度に付与
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO SCOTT;
-- ADMIN OPTION付き(他ユーザーにも付与可能)
GRANT CREATE TABLE TO SCOTT WITH ADMIN OPTION;
ロールの付与
ロールの付与
-- 定義済みロールを付与
GRANT CONNECT, RESOURCE TO SCOTT;
-- DBAロールを付与(管理者権限)
GRANT DBA TO SCOTT;
よく使われるロール
| ロール |
含まれる主な権限 |
用途 |
CONNECT |
CREATE SESSION |
データベース接続 |
RESOURCE |
CREATE TABLE, CREATE SEQUENCE 等 |
開発者向け |
DBA |
ほぼすべてのシステム権限 |
管理者向け |
オブジェクト権限の付与
オブジェクト権限の付与
-- 特定テーブルへのSELECT権限
GRANT SELECT ON HR.EMPLOYEES TO SCOTT;
-- 複数の権限を一度に
GRANT SELECT, INSERT, UPDATE ON HR.EMPLOYEES TO SCOTT;
-- 特定カラムのみUPDATE権限を付与
GRANT UPDATE (salary, commission_pct) ON HR.EMPLOYEES TO SCOTT;
-- GRANT OPTION付き(他ユーザーにも付与可能)
GRANT SELECT ON HR.EMPLOYEES TO SCOTT WITH GRANT OPTION;
権限の取消(REVOKE)
付与した権限を取り消すには REVOKE 文を使用します。
権限の取消
-- システム権限を取消
REVOKE CREATE TABLE FROM SCOTT;
-- ロールを取消
REVOKE RESOURCE FROM SCOTT;
-- オブジェクト権限を取消
REVOKE SELECT ON HR.EMPLOYEES FROM SCOTT;
-- すべてのオブジェクト権限を取消
REVOKE ALL ON HR.EMPLOYEES FROM SCOTT;
注意:システム権限の REVOKE は連鎖しません(ADMIN OPTION で付与された権限を取り消しても、そのユーザーが他に付与した権限はそのまま残ります)。一方、オブジェクト権限の REVOKE は連鎖します(GRANT OPTION で付与された権限を取り消すと、その先の付与もすべて取り消されます)。
DROP USER でユーザーを削除する
不要になったユーザーを削除するには DROP USER 文を使用します。
DROP USER 基本構文
-- ユーザーを削除(オブジェクトを持っていない場合)
DROP USER SCOTT;
-- ユーザーと所有オブジェクトをすべて削除
DROP USER SCOTT CASCADE;
CASCADE の動作
CASCADE を指定すると、ユーザーが所有する以下のオブジェクトもすべて削除されます。
| 削除対象 |
詳細 |
| テーブル |
データも含めてすべて削除 |
| ビュー |
削除される。参照しているビューはINVALIDになる |
| シーケンス |
削除される |
| シノニム |
プライベートシノニムのみ削除 |
| PL/SQL |
ストアドプロシージャ、ファンクション、パッケージ |
| 権限 |
このユーザーに付与された権限はすべて取消 |
注意:CASCADE は元に戻せません。本番環境では必ず事前にバックアップを取得してから実行してください。
ユーザーがオブジェクトを所有しているか確認する
CASCADE を付けずに削除しようとすると、オブジェクトを所有している場合はエラーになります。事前に確認しましょう。
所有オブジェクトの確認
SELECT object_type, COUNT(*) AS cnt
FROM dba_objects
WHERE owner = 'SCOTT'
GROUP BY object_type
ORDER BY cnt DESC;
| OBJECT_TYPE |
CNT |
| TABLE |
12 |
| INDEX |
8 |
| SEQUENCE |
3 |
接続中のユーザーは削除できない
ユーザーがデータベースに接続中の場合、DROP USER はエラーになります。
エラーメッセージ
ORA-01940: cannot drop a user that is currently connected
接続中のセッションを切断してから削除する手順は次のとおりです。
セッション強制切断 → ユーザー削除
-- 1. 対象ユーザーのセッションを確認
SELECT sid, serial#, status
FROM v$session
WHERE username = 'SCOTT';
-- 2. セッションを強制切断(SID=123, SERIAL#=456 の例)
ALTER SYSTEM KILL SESSION '123,456' IMMEDIATE;
-- 3. ユーザーを削除
DROP USER SCOTT CASCADE;
ユーザー情報の確認(DBA_USERS)
ユーザーの属性情報を確認するための主要なディクショナリビューを紹介します。
ユーザーの基本情報を確認する
ユーザー基本情報の確認
SELECT username,
account_status,
default_tablespace,
temporary_tablespace,
profile,
created,
expiry_date,
lock_date
FROM dba_users
WHERE username = 'SCOTT';
ユーザーのシステム権限を確認する
システム権限・ロール・オブジェクト権限の確認
-- システム権限
SELECT privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'SCOTT';
-- 付与されたロール
SELECT granted_role, admin_option, default_role
FROM dba_role_privs
WHERE grantee = 'SCOTT';
-- オブジェクト権限
SELECT owner, table_name, privilege, grantable
FROM dba_tab_privs
WHERE grantee = 'SCOTT';
主なディクショナリビュー一覧
| ビュー |
確認内容 |
DBA_USERS |
ユーザーの基本情報(ステータス、表領域、プロファイル等) |
DBA_SYS_PRIVS |
付与されたシステム権限 |
DBA_ROLE_PRIVS |
付与されたロール |
DBA_TAB_PRIVS |
オブジェクト権限 |
DBA_TS_QUOTAS |
表領域のクォータ |
DBA_PROFILES |
プロファイルの設定内容 |
V$SESSION |
現在接続中のセッション情報 |
複数の属性を一度に変更する
ALTER USER では複数の属性をまとめて変更できます。
複数属性の一括変更
ALTER USER SCOTT
IDENTIFIED BY NewSecurePass123
DEFAULT TABLESPACE APP_DATA
TEMPORARY TABLESPACE TEMP
QUOTA 500M ON APP_DATA
PROFILE APP_PROFILE
ACCOUNT UNLOCK;
他RDBMSとの比較
Oracle以外のRDBMSでのユーザー変更・削除の構文を比較します。
パスワード変更の比較
| RDBMS |
パスワード変更構文 |
| Oracle |
ALTER USER user IDENTIFIED BY pass; |
| MySQL |
ALTER USER 'user'@'host' IDENTIFIED BY 'pass'; |
| PostgreSQL |
ALTER USER user WITH PASSWORD 'pass'; |
| SQL Server |
ALTER LOGIN login WITH PASSWORD = 'pass'; |
ユーザー削除の比較
| RDBMS |
ユーザー削除構文 |
備考 |
| Oracle |
DROP USER user CASCADE; |
CASCADEで所有オブジェクトも削除 |
| MySQL |
DROP USER 'user'@'host'; |
所有オブジェクトは残る |
| PostgreSQL |
DROP USER user; |
所有オブジェクトがあるとエラー(事前にREASSIGN必要) |
| SQL Server |
DROP USER user; + DROP LOGIN login; |
ユーザーとログインが分離 |
MySQL でのパスワード変更・ユーザー削除
-- MySQL: パスワード変更
ALTER USER 'scott'@'localhost' IDENTIFIED BY 'NewPassword123';
-- MySQL: ユーザー削除
DROP USER 'scott'@'localhost';
PostgreSQL でのパスワード変更・ユーザー削除
-- PostgreSQL: パスワード変更
ALTER USER scott WITH PASSWORD 'NewPassword123';
-- PostgreSQL: ユーザー削除(所有オブジェクトの移譲が必要)
REASSIGN OWNED BY scott TO postgres;
DROP OWNED BY scott;
DROP USER scott;
SQL Server でのパスワード変更・ユーザー削除
-- SQL Server: パスワード変更
ALTER LOGIN scott WITH PASSWORD = 'NewPassword123';
-- SQL Server: ユーザー削除(ログインとユーザーの両方を削除)
DROP USER scott;
DROP LOGIN scott;
よくあるエラーと対処法
ユーザーの変更・削除時に発生しやすいエラーとその対処法をまとめます。
| エラー |
原因 |
対処法 |
ORA-01922 |
CASCADE を指定せずにオブジェクトを所有するユーザーを削除しようとした |
DROP USER ... CASCADE; を使用する |
ORA-01940 |
接続中のユーザーを削除しようとした |
ALTER SYSTEM KILL SESSION でセッション切断後に削除 |
ORA-01031 |
ALTER USER / DROP USER の権限が不足している |
DBA権限またはALTER USER / DROP USER権限を確認 |
ORA-28003 |
パスワードがプロファイルの複雑さ要件を満たしていない |
パスワードポリシーに従ったパスワードを設定 |
ORA-28000 |
アカウントがロックされている |
ALTER USER ... ACCOUNT UNLOCK; でロック解除 |
ORA-28001 |
パスワードが期限切れ |
パスワードを再設定してACCOUNT UNLOCK |
ORA-01918 |
指定したユーザーが存在しない |
DBA_USERS でユーザー名を確認(大文字/小文字注意) |
ORA-01922 の対処例
ORA-01922 の発生と対処
-- エラーが発生するケース
DROP USER SCOTT;
-- ORA-01922: CASCADE must be specified to drop 'SCOTT'
-- 対処: CASCADEを付けて実行
DROP USER SCOTT CASCADE;
ORA-28003 の対処例
ORA-28003 パスワード検証関数の確認
-- パスワード検証関数を確認
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION'
AND profile = (
SELECT profile FROM dba_users
WHERE username = 'SCOTT'
);
実務でのベストプラクティス
ユーザー管理のベストプラクティス
- 本番環境では必ず手順書を作成 — ALTER USER / DROP USER の影響範囲を事前に文書化
- DROP USER 前にバックアップ — CASCADE で削除するオブジェクトをエクスポート(expdp)しておく
- 権限は最小限に — DBAロールの安易な付与を避け、必要な権限のみ付与する
- ロールを活用 — 個別のシステム権限よりもカスタムロールでまとめて管理する
- プロファイルでパスワードポリシーを統一 — アプリケーション用と管理者用でプロファイルを分ける
- 定期的な権限の棚卸し — 不要な権限やユーザーを定期的にレビューする
- 監査ログの有効化 — ALTER USER / DROP USER の実行を監査ログに記録する
ユーザー削除の安全な手順
本番環境でユーザーを削除する際の推奨手順です。
安全なユーザー削除手順
-- 1. ユーザーの所有オブジェクトを確認
SELECT object_type, object_name
FROM dba_objects
WHERE owner = 'SCOTT'
ORDER BY object_type, object_name;
-- 2. ユーザーの権限を確認
SELECT privilege FROM dba_sys_privs WHERE grantee = 'SCOTT';
SELECT granted_role FROM dba_role_privs WHERE grantee = 'SCOTT';
-- 3. 他ユーザーが参照しているオブジェクトを確認
SELECT owner, name, type, referenced_name
FROM dba_dependencies
WHERE referenced_owner = 'SCOTT';
-- 4. バックアップを取得(Data Pump)
-- expdp system/password schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=scott_backup.dmp
-- 5. 接続中のセッションを確認・切断
SELECT sid, serial# FROM v$session WHERE username = 'SCOTT';
-- 6. アカウントをまずロック(即時削除しない場合)
ALTER USER SCOTT ACCOUNT LOCK;
-- 7. 問題なければ削除を実行
DROP USER SCOTT CASCADE;
まとめ
| 操作 |
SQL構文 |
| パスワード変更 |
ALTER USER user IDENTIFIED BY pass; |
| アカウントロック |
ALTER USER user ACCOUNT LOCK; |
| アカウントアンロック |
ALTER USER user ACCOUNT UNLOCK; |
| 表領域変更 |
ALTER USER user DEFAULT TABLESPACE ts; |
| クォータ変更 |
ALTER USER user QUOTA size ON ts; |
| プロファイル変更 |
ALTER USER user PROFILE profile; |
| 権限付与 |
GRANT priv TO user; |
| 権限取消 |
REVOKE priv FROM user; |
| ユーザー削除 |
DROP USER user CASCADE; |
ポイント:
ALTER USER で複数の属性をまとめて変更できる
- 権限管理は
GRANT / REVOKE で行い、ロールを活用すると管理が楽になる
DROP USER CASCADE は所有オブジェクトもすべて削除されるため、本番では必ずバックアップを取得する
- ユーザー情報は
DBA_USERS、権限は DBA_SYS_PRIVS / DBA_ROLE_PRIVS / DBA_TAB_PRIVS で確認する
- パスワードポリシーはプロファイルで一元管理し、用途に応じて使い分ける
あわせて読みたい