sql >> データベース >  >> RDS >> Oracle

新しいOracleユーザーを作成して権限を付与する:構文と例

    この記事では、Oracleでユーザーを作成する方法について説明します。新しいデータベースユーザーを追加する方法を学び、このジョブに含まれる補足的な側面を把握します。最初のユーザーの作成から削除までです。さらに、IDENTIFYの操作に関するいくつかの役立つヒントがあります。 およびTABLESPACE 句、およびGRANTの方法を学びます Oracleの役割と権限。

    コンテンツ

    • Oracleで新しいユーザーを作成する方法
    • OracleCREATEUSERの構文例
    • デフォルト設定でデフォルトユーザーを作成する方法
    • 句で識別されるユーザーを作成する
      • パスワード句で識別されるユーザーを作成する
      • 外部およびグローバル条項
    • テーブルスペース句を使用してユーザーを作成する
      • デフォルトの表スペース
      • 一時表スペース
      • 割り当て
    • ユーザー属性の作成
      • プロフィール
      • パスワードの有効期限
      • アカウントのロック/アカウントのロック解除
    • ユーザーに役割を付与する
    • Oracleでの権限の付与
    • GRANTコマンド構文
    • Oracleユーザー権限
    • すべての権限を作成してOracleユーザーに付与する方法
    • Oracleのユーザーにテーブル権限を付与する方法
    • dbForge Studio forOracleを使用してOracleユーザーを作成し、権限を簡単に付与する
    • Oracleでユーザーを削除(ドロップ)する方法
    • 結論

    Oracleで新しいユーザーを作成する方法

    開始する前に、ユーザーを作成するために必要なシステム権限があるかどうかを確認する必要があります。そうでない場合は、必ずアカウントに割り当ててください。その後、実際のタスクに進むことができます。この記事の例は、ユーザーの作成Oracle 19cバージョンに関連していますが、使用中のすべてのOracleバージョン(Oracle 10g、11g、12cなどを含む)で方法は同じです。

    OracleCREATEUSERの構文例

    手始めに、Oracle CREATE USERを調べます。 構文。まず、デフォルト設定で作成する方法について説明します。その後、IDENTIFIEDのさまざまなバリエーションに移ります CREATE USERの句、テーブルスペース句、およびその他の特性 Oracleの構文。

    デフォルト設定でデフォルトユーザーを作成する方法

    基本から始めるのが常に最善です。したがって、CREATE USERに焦点を当てましょう。 単独でコマンド。現状では、デフォルトの属性を持つユーザーが作成されます。この記事ではさらに、ユーザーをより細かく構成する方法と、それがデータベースの安全性を一般的に高める方法について説明します。

    句で識別されるユーザーを作成

    IDENTIFIED 句を使用すると、Oracleデータベースがユーザーを認証する方法を指定できます。 IDENTIFIEDのさまざまな例を詳しく見てみましょう。 Oracleの構文。

    パスワード句で識別されるユーザーを作成

    最も簡単なケースでは、ユーザー名の下に新しいローカルユーザーを作成しています。ユーザーは、システムにログインするためにパスワードを入力する必要があります:

    CREATE USER <username> IDENTIFIED BY <password>;

    ユーザー名は何でもかまいません。ただし、パスワードはデータベースの文字セットのシングルバイト文字で構成されている必要があります。文字セットにマルチバイト文字も含まれている場合、パスワード要件は変更されません。シングルバイト文字のみを使用してください。

    CREATE USER visitor
      IDENTIFIED BY psw4visits;
    外部およびグローバル条項

    パスワードによる識別に加えて、ユーザー認証の他の2つの手段のいずれかを使用できます。外部ユーザーまたはグローバルユーザーを構成します。これを行うには、EXTERNALLYを含める必要があります またはGLOBALLY CREATE USERの句 Oracleコマンド。

    EXTERNALLY 外部ユーザーを作成できます。この場合、ユーザーはオペレーティングシステムなどの外部システムによって認証されます。たとえば、OracleデータベースユーザーはWindowsユーザーです。したがって、他のパスワードを入力しなくても、Windowsによって認証された後、データベースにアクセスできます。外部ユーザーの下での作業は、通常のデータベースユーザーの標準オプションです。ただし、このようなユーザーには、管理者またはデータベースオペレーターの特権がなく、標準の役割(CONNECTおよびRESOURCE)しかありません。

    外部ユーザーを作成するには、次のステートメントを実行します。

    CREATE USER external_user1
      IDENTIFIED EXTERNALLY
      DEFAULT TABLESPACE tbs_new_10
      QUOTA 10M ON tbs_new_10
      PROFILE external_user_profile1;

    このようにして、データベースの新しい外部ユーザーを作成しました。名前はexternal_user1です。追加のパスワードは必要ありません。このユーザーに、10Mbのクォータを持つデフォルトのテーブルスペースtbs_new_10を割り当てました。その他の制限は、このユーザーに適用されるexternal_user_profile1によって定義されます。

    前述したように、さまざまな外部システムがOracleデータベース内の外部ユーザーを維持および管理できます。オペレーティングシステムの機能を使用することが最も一般的なオプションです。したがって、オペレーティングシステムのシステムアカウントからアクセスできる外部データベースユーザーを作成する場合は、ステートメントを少し変更するだけで済みます。ユーザー名にops$プレフィックスを追加します:

    CREATE USER ops$external_user1
      IDENTIFIED EXTERNALLY
      DEFAULT TABLESPACE tbs_new_10
      QUOTA 10M ON tbs_new_10
      PROFILE external_user_profile1;

    GLOBALLY グローバルユーザーの作成を可能にします。これは、ログインとパスワードが特定のデータベースではなく、Central OracleSecurityServerに保存されていることを意味します。さらに、その中央サーバー上のグローバルユーザーに割り当てられた役割は、任意のデータベースのこのユーザーに適用されます。別のデータベースでユーザーロールを構成する必要はありません。グローバルユーザーに対してシングルサインオンオプションを有効にする必要があることに注意してください。

    グローバルデータベースユーザーを作成するには、次のステートメントを使用します。

    CREATE USER global_user1
      IDENTIFIED GLOBALLY AS 'CN=manager, OU=division, O=oracle, C=US'
      DEFAULT TABLESPACE USERS
      QUOTA 10M on USERS;

    これで、 global_user1という名前の新しいグローバルデータベースユーザーができました。 。 ユーザーを割り当てました そのユーザーのデフォルトの表領域で、見積もりは10Mです。

    テーブルスペース句を使用してユーザーを作成

    それでは、基本的なOracleの新しいユーザースクリプトを作成する方法を確認しましょう。以下です:

    CREATE USER username
        IDENTIFIED BY password
        DEFAULT TABLESPACE tablespace
        TEMPORARY TABLESPACE tbs_temp_01
        QUOTA {size | UNLIMITED} ON tablespace;

    ご覧のとおり、スクリプトには、考慮すべきいくつかの句が含まれています。

    デフォルトのテーブルスペース

    この句は、ユーザーが作成したオブジェクトのデフォルトの表領域を指定します。それ以外の場合、そのようなオブジェクトはデータベースのデフォルトのテーブルスペースに格納されます。この特定のデータベースにデフォルトの表領域が指定されていない場合、オブジェクトはシステム表領域に入ります。

    制約事項:ローカルで管理されている一時表領域(UNDO表領域やディクショナリで管理されている一時表領域など)をOraclecreateuserのデフォルト表領域として指定しないでください。

    一時テーブルスペース

    この句は、ユーザーの一時セグメントを含むことを意図したテーブルスペース/テーブルスペースグループを指定します。これがないと、これらのユーザーの一時セグメントは、システムテーブルスペースのデータベースのデフォルトの一時テーブルスペースに格納されます。スクリプトにtablespace_group_name値を含むテーブルスペースグループを指定すると、ユーザーの一時セグメントをそのグループの任意のテーブルスペースに保存できます。


    必ず標準のブロックサイズで一時表領域を指定してください。 UNDO表領域または自動セグメント・スペース管理を備えた表領域にすることはできません。

    割り当て

    この句は、このユーザーが表領域に割り当てることができるスペースの量を指定します。複数のQUOTA 1つのOracleCREATE USERの句 複数の表領域を指定する必要がある場合は、コマンドを指定できます。
    句にはUNLIMITEDを含めることができます この明確なユーザーが必要なだけテーブルスペースを無制限に割り当てることができるようにするための定義。

    制限QUOTA 句は一時表領域には適用されません。

    ユーザー属性の作成

    追加のオプションのOracleCREATE USER 構文に含めることができる属性。次の例を見てください:

    CREATE USER username
        IDENTIFIED BY password
        [DEFAULT TABLESPACE tablespace]
        [QUOTA {size | UNLIMITED} ON tablespace]
        [PROFILE profile]
        [PASSWORD EXPIRE]
        [ACCOUNT {LOCK | UNLOCK}];

    これらのオプションの条項を確認しましょう。

    プロファイル

    このオプションの句を使用すると、特定のプロファイルで制限が定義されている場合に、この特定のユーザーのデータベースリソースを一度に制限できます。この句がないと、新しいユーザーは自動的にデフォルトのプロファイルになります。

    パスワードの有効期限

    この句はオプションですが、多くのデータベース管理者は、より効果的なセキュリティのためにこの句を設定しています。含まれている場合、この句はユーザー側のパスワードの強制変更を決定します。通常、これはユーザーが初めてデータベースにログインしようとしたときに発生します。

    アカウントのロック/アカウントのロック解除

    これらの句のいずれかを使用できます。 LOCKを使用 適用されると、Oracleはユーザーアカウントを作成しますが、そのアカウントはデータベースにアクセスできません。 UNLOCKを適用した場合 条項を指定するか、これら2つの条項のいずれも指定しない場合、アカウントは一度に使用可能になります。ロック解除ステータスがデフォルトです。

    CREATE USER これらの追加パラメーターを使用したステートメントは次のようになります。

    CREATE USER visitor
        IDENTIFIED BY migzw23ter
        DEFAULT TABLESPACE tbs_new_10
        QUOTA 50M ON tbs_new_10
        TEMPORARY TABLESPACE tbs_temp_10
        QUOTA 5M ON system 
        PROFILE qualified_user
        PASSWORD EXPIRE;
    ACCOUNT UNLOCK	

    ここで、ステートメントは visitorという名前の新しいOracleデータベースユーザーを作成します。 、パスワード migzw23ter 。このユーザーには、デフォルトのテーブルスペース tbs_new_10が割り当てられます。 50Mbのクォータで。このユーザーは、一時表領域 tbs_temp_10の使用も許可されています。 。

    ユーザーに役割を付与する

    最初のステップは、ユーザーの作成です。次は、ユーザーの権限を設定することです。新しく作成されたユーザーは、データベースに接続する場合でも、何もできません。

    Oracleデータベースの操作には、必然的にデータベースユーザーを作成するタスクが含まれます。 Oracleが独自に作成するシステムユーザーアカウントがあります– hr OE sys 、など。これらのアカウントには、権限と制限のある事前定義された構成があります。ただし、日常業務には常に他のユーザーが必要です。

    DBAの義務の1つは、追加のデータベースユーザーを作成することです。この作業には、ユーザーアカウントの構成、特権の設定、およびビジネス目標に応じたユーザーの管理が含まれます。

    Oracleでの権限の付与

    GRANTを使用する コマンドを使用すると、ユーザーに特定の特権を提供し、必要に応じてユーザーの役割を構成できます。 Oracleでは、他のユーザーがデータベース内のデータを操作および管理できるように、他のユーザーに権限を付与できます。 GRANT は非常に強力なステートメントであり、多くの可能なオプションがありますが、コア機能は、データベース全体でユーザーとロールの両方の特権を管理することです。

    GRANTコマンド構文

    ユーザーに特定の特権を付与するためのクエリの基本的な構文は次のとおりです。

    GRANT <permission> to <user>;

    Oracleユーザー権限

    GRANT コマンドは、データベースオブジェクトを作成、変更、削除、および管理するための特権をユーザーに与えることができます。たとえば、テーブルスペースを作成したり、データベース内のテーブルの行を削除したりする権限は、システム権限です。

    Oracleには、SYSTEM_PRIVILEGE_MAPテーブルにある100を超えるシステム権限があります。

    CLUSTER CREATE / CREATE ANY / ALTER ANY / DROP ANY CLUSTER
    データベース ALTER DATABASE、ALTER SYSTEM、AUDIT SYSTEM
    インデックス ANY / ALTER ANY / DROPANYINDEXを作成
    プロファイル CREATE / ALTER / DROP PROFILE
    役割 CREATE / ALTER ANY / DROP ANY / GRANT ANY(REVOKEを許可)
    ロールバックセグメント CREATE / ALTER / DROP ROLLBACK SEGMENT
    ユーザー CREATE / ALTER / BECOME / DROP USER
    表示 CREATE / CREATE ANY / DROP ANY VIEW
    類義語 CREATE / CREATE ANY / CREATE PUBLIC / DROP ANY / DROP PUBLIC SYNONYM
    セッション CREATE / ALTER / RESTRICTED SESSION、ALTER RESOURCE COST
    CREATE / CREATE ANY / ALTER ANY / DROP ANY / SELECT ANY / INSERT ANY / UPDATE ANY / DELETE ANY / LOCK ANY TABLE
    テーブルスペース CREATE / ALTER / DROP / MANAGE TABLESPACE

    通常、データベースの管理者はユーザーに特権を付与します。ただし、管理者がOracleユーザー権限を譲渡する必要がある場合があります。これは、DBA特権が入ってくるときです。DBAが他の人にシステム特権を提供する必要がある場合は、管理オプションを使用して実行する必要があります。

    GRANT create session TO user;
    GRANT create session TO user with admin option;
    Revoke create session from user;

    Oracleシステム権限に加えて、オブジェクト権限はデータベースオブジェクト(テーブル、ビュー、プロシージャなど)に付与されます。

    すべての権限を作成してOracleユーザーに付与する方法

    まず、データベースにログインするためのシステム権限をユーザーに付与する必要があります。そのために次のステートメントを使用します:

    GRANT CREATE SESSION to visitor;

    データベース管理者がユーザーに提供できる多くの権限があります。ただし、セキュリティの主要な概念に固執することが不可欠です。これは、ユーザーに仕事を効率的に行うために必要な最小限の特権を与えることです。そのため、ユーザーにすべての権限を提供することはお勧めしません。

    他の特権を1つずつ、それぞれ個別のステートメントで適用できます。または、以下に示すように、これらの権限を1つに組み合わせることができます。

    GRANT CREATE VIEW, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER to visitor;

    この明確なユーザーがテーブル、プロシージャ、トリガーなどを変更できる場合、それぞれの場合に必要な特権を設定するための構文は次のとおりです。繰り返しになりますが、この権限はグローバルであるため、ユーザーが要素を変更できるようにする場合は十分に注意してください。

    GRANT ALTER ANY TABLE to visitor;
    GRANT ALTER ANY PROCEDURE to visitor;
    GRANT ALTER ANY TRIGGER to visitor;

    ユーザーが要素を削除できるようにするには、次のステートメントを使用します。

    GRANT DELETE ANY TABLE to visitor;
    GRANT DROP ANY PROCEDURE to visitor;
    GRANT DROP ANY TRIGGER to visitor;
    GRANT DROP ANY VIEW to visitor;
    Oracleのユーザーにテーブル権限を付与する方法

    特定のユーザーに特権を設定する前に、そのユーザーがデータベースで実行する必要のあるタスクを検討する必要があります。最も一般的なシナリオには、テーブル、ビュー、プロシージャ、トリガーの作成が含まれます。場合によっては、これらの要素を変更または削除する可能性が必要です。状況に応じて、管理者は提供するシステム権限を定義します。

    CREATE TABLEを付与する方法を詳しく見てみましょう。 Oracleのユーザーに対する特権。ユーザーを許可する場合–訪問者 –データベースにテーブルを作成するには、次のクエリを使用します。

    GRANT CREATE TABLE to visitor;

    dbForge Studio forOracleを使用してOracleユーザーを作成し、権限を簡単に付与する

    Oracleデータベースを日常的に使用していて、便利なオールインワンの強力なIDEを探している場合、検索はここで終了します。 dbForge Studio for Oracleは、開発者がPL / SQLコーディングを高速化するのに役立ち、データベース内および外部データを管理するための多用途のデータ編集ツールを提供します。

    この記事では、次の多目的スクリプトを使用してOracleユーザーを作成し、DBA権限を付与します。

    DECLARE
     schema_name VARCHAR2(255):='username1'; -- Insert your username instead of 'username1'
     row_count NUMBER;
    BEGIN
     FOR r IN (SELECT sid,serial# FROM v$session WHERE username = schema_name)
     LOOP
       EXECUTE IMMEDIATE 'ALTER SYSTEM DISCONNECT SESSION ''' || r.sid || ',' || r.serial# || ''''||' IMMEDIATE';
       EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || r.sid || ',' || r.serial# || '''';
     END LOOP;
    
     SELECT count(*) INTO row_count FROM dba_users WHERE username = schema_name;
     IF row_count > 0 THEN
       EXECUTE IMMEDIATE 'DROP USER '||schema_name||' CASCADE';
     END IF;
     EXECUTE IMMEDIATE 'CREATE USER '||schema_name||' IDENTIFIED BY ' || schema_name;
     EXECUTE IMMEDIATE 'GRANT dba TO '|| schema_name;
     EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA = '||schema_name;
    END;
    / 

    提供されたスクリプトで行っていることは次のとおりです。

    • 新しいユーザーの作成
    • 新しく作成されたユーザーにDBA権限を付与する
    • 新しく作成されたユーザーを現在のセッションのデフォルトユーザーとして設定する

    Oracleでは、ユーザーとスキーマは基本的に同じものです。ユーザーはデータベースに接続するためのアカウントであり、スキーマはそのアカウントに属するオブジェクトのセットであると見なすことができます。新しく作成されたスキーマは空であるため、データベースエクスプローラーには表示されません。 。

    部門を作成しましょう 新しいユーザーをリストに表示するためのテーブル。これを行うには、次のスクリプトを自由に使用してください。

    CREATE TABLE departments (
      department_id NUMBER CONSTRAINT PK_DepID PRIMARY KEY,
      department_name varchar2(255) NOT NULL,
      location_id NUMBER  NOT NULL);

    この操作のために別のSQLドキュメントを開く必要はないことに注意してください。 dbForge Studio for Oracleでは、コードを部分的にしか実行できません。 CREATE TABLEを選択するだけです 句を入力して右クリックし、選択の実行を選択します 。

    AutoComitをお持ちの場合 機能がオンの場合、前のステップが最後のステップになります。ただし、オフの場合は、変更をコミットする必要があります。次に、データベースエクスプローラーを更新すると、 username1が表示されます。 リストにあります。

    古いセッションがサーバー上で実行されたままになる場合があります。新しいコマンドの実行を妨げる可能性があります。上記のコードでは、すべての古いセッションが自動的に検出され、サーバーから削除されます。現在のセッションを再開する必要がある場合は、次のクエリのいずれかを使用して、セッションを切断または強制終了できます。

    • ALTER SYSTEM DISCONNECT SESSION
    • ALTER SYSTEM KILL SESSION
    Oracleでユーザーを削除(ドロップ)する方法

    何らかの理由でユーザーを削除する必要がある場合は、DROP USERを使用する必要があります 次の構文のコマンド:

    DROP USER <username>;

    テストケースでは、ユーザー visitorを削除します 以前に作成:

    DROP USER visitor;

    ただし、ユーザーを削除する前に注意する必要があるいくつかの制限があります。

    • 関連するすべてのオブジェクトを削除せずにユーザーを削除することはできません。したがって、DROPコマンドに進む前に、このユーザーが作成したすべてのテーブル、ビュー、プロシージャなどを削除する必要があります。
    • データベースに接続しているユーザーを削除することはできません。まず、ユーザーが行ったすべてのセッションをクリアする必要があります。その後、ユーザー自体を削除できます。

    すべてのデータベースオブジェクトを含むユーザーを一度に削除できる特別なコマンドがあります:

    DROP USER <username> CASCADE;
    結論

    要約すると、Oracle SQL CREATE USERを使用できるようになりました 新しいユーザーを追加し、構成し、管理するコマンド。手動パフォーマンスの例を使用しました。ただし、Oracleデータベース用の最新のソフトウェアソリューションの機能により、この作業が簡素化され、より高速で正確になります。 dbForgeStudioをお気軽に試してみてください。

    便利なリンク

    • Oracleでの新しいユーザーアカウントの設定
    • Oracleデータベース管理ツール
    • Oracleでデータベースを作成する
    • Oracleの名前変更テーブル
    • Oracle Alter Table


    1. postgresのすべてのレコードをTitlecase、最初の文字は大文字に変換します

    2. MySQLは大きなデータベースから重複をすばやく削除します

    3. 中間テーブルを使用してpostgresテーブルを分割する方法

    4. SQLのデータ型のサイズを変更します