Users and Roles (or Groups)

UsersとRolesのリストはActive Directoryから読み込まれます。リストは、サーバーの起動または再起動後、関連するテーブルを最初に呼び出す際にロードされ(SYSADMIN.UsersおよびSYSADMIN.Roles)、サーバー上にキャッシュされます。新規ユーザーはキャッシュをリフレッシュすることなくCData Virtuality にログインできます。しかし、新しいユーザーやロールをクエリするには、SYSADMIN.refreshLdapUserCache プロシージャを使用してキャッシュをリフレッシュする必要があります。

CALL "SYSADMIN.refreshLdapUserCache"();;

CData Virtuality Server がLDAP ドメインからユーザー、パスワード、ロールを読み取るように設定されている場合、これらのオブジェクトに関連する一部の機能はCData Virtuality Server で使用できなくなります。特に、CData Virtuality Server からユーザーとロールを扱うことは不可能で、LDAP で直接管理する必要があります。

このため、以下のストアドプロシージャは使用できなくなりました:

  • SYSADMIN.addRole()
  • SYSADMIN.renameRole()
  • SYSADMIN.deleteRole()
  • SYSADMIN.importUser()
  • SYSADMIN.addUser()
  • SYSADMIN.renameUser()
  • SYSADMIN.deleteUser()
  • SYSADMIN.changeUserPwd()
  • SYSADMIN.getEncryptedUserPwd()
  • SYSADMIN.addUserRole()
  • SYSADMIN.deleteUserRole()

これらが呼び出された場合、このエラーメッセージが表示されます:

UnsupportedLdapUsersHandlerOperationException. This operation is not supported when LDAP is used for the authentication.

Permissions

権限はdvconfigでローカルに扱われ保存され、デフォルトの dvconfig ベースの 認証機構と同様にSYSADMIN.setPermissions()システムプロシージャを使って設定することができます。

Special Permission to Create Temporary Tables

CData Virtuality Server のデフォルトメカニズムでは、テンポラリテーブルを作成する特別なパーミッションは通常ロールに割り当てられ、SYSADMIN.addRole()を介して新しいロールが作成されたときに設定されます。

CData Virtuality Server with LDAP  認証メカニズムはロールを扱えないため、その許可を付与または取り消す手順も提供されます。

SYSADMIN.setAllowCreateTempTables(IN role_name string NOT NULL, IN allow boolean NOT NULL)

このプロシージャは両方の認証機構で使用することができ、ロールに適切な権限を付与/拒否します。

主な違いは(ただし、これは技術的な詳細に過ぎません)、dvconfig ベースの認証が使用されている場合、特別なパーミッションはロールに設定され、通常どおりdv_rolesテーブルに格納されます。LDAP がユーザー認証用に設定されている場合、特別なパーミッションはdv_ldap_role_propsという新しい適切なテーブルに格納されます。

Adding a Role with Minimal Permissions

以下の手順を実行して、CData Virtuality Server に接続するための最小限の権限を持つロールを作成します。すべてのユーザーに管理者権限を与えたくないかもしれません。

1. ディレクトリに新しいグループを作成します。ログインモジュールのコンフィギュレーションの検索範囲内であることを確認してください。

2. 必要に応じて、管理者ではないUserを作成してください。

3. ユーザーをグループに割り当てます。ダブルチェックしてください(スクリーンショットを参照):


4. 管理者としてCData Virtuality Server に接続し、Studio のUser Management に進みます。ユーザーがユーザー、ロール、および割り当てを認識していることを確認します。
そうでなければ、ログインモジュールの構成とディレクトリ構造を見てください。スクリーンショットは、ディレクトリからすべてが正しく読み込まれた場合を示しています:

5.  以下のスクリプトを使用できます(custom-connect-roleをロール名に置き換えることを忘れないでください):

BEGIN
DECLARE string roleName='custom-connect-role';
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN', "permissions" => 'R') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getInstalledLicense', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getServerVersion', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getServerBuildInfo', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getCurrentDWH', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.refreshDataSource', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.refreshAllDataSources', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getDefaultOptionValue', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getCurrentUser', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getUserProperty', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getDataCatalogAttribute', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.reservedwords', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getCatalogs', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getViewAndProcCreationOrder', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.refreshSchema', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.getDataLineage', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.setRemark', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.refreshAllSchemas', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSADMIN.md5', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'UTILS.getJobProperties', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'UTILS.getConnectorProperties', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'UTILS.pipes_helper__status', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'INFORMATION_SCHEMA', "permissions" => 'RE') ;
CALL SYSADMIN.setPermissions("role_name" => roleName, "resourceName" => 'SYSLOG', "permissions" => 'R') ;
END ;;

ディレクトリ内のこのグループに属するすべてのUserが接続できるようになります。