統合化ログインを持つ Windows ユーザ・グループのメンバであるユーザが、グループの統合化ログインを使用してデータベースに接続できないようにするには、2 つの方法があります。
パスワードのないデータベース・ユーザ ID に対して、ユーザの統合化ログインを作成します。
ユーザがログインを許可されているかどうかを確認し、無許可のユーザが接続しようとすると例外を発行するストアド・プロシージャを作成します。このストアド・プロシージャは、[login_procedure] オプションによって呼び出します。
ユーザが統合化ログインを持つ Windows ユーザ・グループのメンバで、さらにそのユーザ ID に対する明示的な統合化ログインも持っている場合、データベースへの接続にはそのユーザの統合化ログインが使用されます。ユーザが Windows ユーザ・グループの統合化ログインを使用してデータベースへ接続できないようにするには、データベース・ユーザ ID へのWindows ユーザの統合化ログインをパスワードなしで作成します。パスワードを持たないデータベース・ユーザ ID は、データベースに接続できません。
データベースにパスワードなしでユーザを追加します。次に例を示します。
CREATE USER db_user_no_password; |
パスワードを持たないデータベース・ユーザにマッピングする Windows ユーザの統合化ログインを作成します。次に例を示します。
GRANT INTEGRATED LOGIN TO WindowsUser AS USER db_user_no_password; |
login_procedure オプションは、データベースへの接続が試行されるたびに呼び出すストアド・プロシージャを指定します。デフォルトでは dbo.sp_login_environment プロシージャが呼び出されます。login_procedure オプションを設定して、特定のユーザがデータベースに接続できないようにするために作成したプロシージャを呼び出すことができます。
次の例では、login_procedure オプションによって呼び出される login_check というプロシージャを作成します。login_check プロシージャは、データベースに接続できないユーザのリストに照らし合わせて、指定されたユーザ名を確認します。指定されたユーザ名がリストに見つかると、接続は失敗します。この例では、Joe、Harry、または Martha というユーザは接続を許可されていません。ユーザがリストに見つからない場合、データベース接続は通常どおり実行され、sp_login_environment プロシージャが呼び出されます。
CREATE PROCEDURE DBA.user_login_check() BEGIN DECLARE INVALID_LOGON EXCEPTION FOR SQLSTATE '28000'; // Disallow certain users IF( CURRENT USER IN ('Joe','Harry','Martha') ) THEN SIGNAL INVALID_LOGON; ELSE CALL sp_login_environment; END IF; END go GRANT EXECUTE ON DBA.user_login_check TO PUBLIC go SET OPTION PUBLIC.login_procedure='DBA.user_login_check' go |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |