CATALOG_PERMISSIONS¶
説明
ストアドプロシージャ CATALOG_PERMISSIONS は、ユーザーおよびロールの一方または両方に付与されている権限とカスタムポリシーに関する情報を返します。
各権限は、1 つの行で返されます。つまり、あるデータベース、ビュー、またはストアドプロシージャに対してあるユーザーまたはロールに付与されている権限ごとに 1 つの行が存在します。
このプロシージャはどのユーザーも実行できますが、そのユーザーが管理者かどうかによって結果は異なります。管理者は、あらゆるユーザーまたはロールに付与されている権限を参照できますが、管理者以外のユーザーは、そのユーザーまたはそのユーザーのロールに直接付与されている権限のみを参照できます。
このプロシージャは、Kerberos または LDAP のユーザー (Virtual DataPort で作成されていないユーザー) に関する情報を返しません。ただし、この情報がこのストアドプロシージャを実行しているユーザーに関するものである場合を除きます。
構文
CATALOG_PERMISSIONS (
username_in : text
, rolename_in : text
)
username_in: 権限を取得する対象となるユーザーの名前。rolename_in: 権限を取得する対象となるロールの名前。
このプロシージャを実行するユーザーが管理者の場合、以下の点を考慮してください。
両方のパラメータが
nullの場合、このプロシージャは、すべてのユーザーおよびロールに付与されているすべての権限を返します。これは、接続先の Virtual DataPort サーバーで設定されているすべての権限を取得する必要がある場合に役立ちます。rolename_inがnullであっても、username_inは null でない場合、このプロシージャはユーザーに付与されている権限とそのユーザーのロールに付与されている権限を返します。username_inがnullであっても、rolename_inは null でない場合、このプロシージャはロールに付与されている権限とこのロールのロールに付与されている権限を返します。両方のパラメータに値が指定されている場合、このプロシージャは
username_inに直接付与されている権限と、ロールrolename_inに付与されている権限を返します。この場合、username_inにはロールrolename_inが付与されている必要があります。そうでないと、このプロシージャは失敗します。
このプロシージャを実行するユーザーが管理者ではない場合もその動作は同様ですが、以下の例外があります。
このプロシージャは、他のユーザーの権限を返しません。
username_inがnullではない場合、その値はこのプロシージャを実行しているユーザーの名前である必要があります。そうでないと、このプロシージャはエラーを返します。rolename_inがnullではない場合、このプロシージャを実行するユーザーにこのロールが直接または推移的に付与されている必要があります。そうでないと、このプロシージャはエラーを返します。
ユーザー/ロールに付与されている権限またはカスタムポリシーは、それぞれ 1 つの行で返されます。
出力スキーマには以下のフィールドがあります。
username: この権限が属すユーザー。この行がロールに付与されている権限を示す場合はnullです。入力パラメータ
username_inがnullではない場合、またはusername_inおよびrolename_inがnullの場合、ユーザー名が保持されます。後者の場合、ロールに付与されている権限についてはこのフィールドはnullになります。globaladmin: 指定できる値は以下のとおりです。null: 行がユーザーではなくロールに付与されている権限を表す場合。true: 行が (ロールではなく) ユーザーに付与されている権限を表しており、そのユーザーが管理者であるか、ロールserveradminを持っている場合。false: それ以外の場合。
userrolename: このフィールドがnullではない場合、行はこの値を持つロールから継承された権限を表します。usernameフィールドがnullではない場合、行はロールから継承されたユーザーの権限を表します。rolenameフィールドがnullではない場合、行は別のロールから継承されたロールの権限を表します。権限がユーザーまたはロールに直接付与された場合、このフィールドは
nullです。rolename: 権限は「推移的」に継承できます。つまり、ユーザーは、別のロールから継承されたロールの権限を継承できます。この列には、権限が付与された元のロールが含まれます。dbname: この権限が付与されているデータベースの名前。elementname: この権限が付与されたデータベースのエレメントの名前。この権限が単一のエレメントではなくデータベースに対して付与されている場合はnullです。elementtype: この権限が付与されているデータベースのエレメントのタイプ。想定される値は、Data source、View、Procedure、Web service、またはWidgetです。elementsubtype: エレメントタイプがData sourceではない場合はnullです。それ以外の場合は、データソースのタイプです。想定される値は、df、essbase、jdbc、json、custom、odbc、olap、salesforce、sapbwbapi、saperp、ws、xmlです。dbadmin、dbconnect、dbcreate、dbcreatedatasource、dbcreatedataservice、dbcreateview、dbcreatefolder、dbexecute、dbwrite、dbmetadata、およびdbfile: データベースに対して付与できる権限を表します。この行がデータベース以外 (個々のエレメントなど) に対して付与される権限を表す場合はnullです。elementmetadata、elementexecute、elementwrite、elementinsert、elementupdate、およびelementdelete: データベースではなくデータベースのエレメントに対して付与できる権限を表します。columnpermissions: 行が列権限を持つビューに対して付与されている権限を表す場合、これはnullではありません。この場合、このフィールドには、投影可能なフィールドのコンマ区切りリストが含まれます。rowpermissions: 行が行制約のあるビューに対して付与されている権限を表す場合、これはnullではありません。この場合、このフィールドは以下のフィールドを含む配列です。sensitivefields: 制約の機密フィールド。condition: 制約の条件。action: 条件を満たさない場合に制約によって実行されるアクション。
custompermissions: この配列が、ユーザー/ロールに付与されている、ビューに関するカスタムポリシーのリストを表す場合はnull以外の値です。
必要な権限
このプロシージャによって返される情報は、このプロシージャを実行するユーザーのタイプによって異なります。
管理者: このプロシージャは、任意のユーザーまたはロールの権限に関する情報を返します。
その他のユーザー (データベースの管理者を含む): このプロシージャは、このプロシージャを実行しているユーザー、またはこのユーザーに付与されているロールに付与されている権限に関する情報のみを返します。
このプロシージャは、以下のいずれの場合もエラーを返します。
管理者以外のユーザーが、別のユーザーに付与されている権限をリクエストする場合。
管理者以外のユーザーが、ロールに付与されている権限をリクエストし、このユーザーがこのロールを持っていない場合。
入力ユーザーが Kerberos または LDAP のユーザー (つまり Virtual DataPort で作成されていないユーザー) であり、このプロシージャを実行するユーザーではない場合。この場合、このユーザーが存在しないことを示すエラーが返されます。
