有两种方法可以防止具有集成登录的 Windows 用户组中的成员使用该组的集成登录连接到数据库:
为该用户创建一个到没有口令的数据库用户 ID 的集成登录。
创建一个由 login_procedure 选项调用的存储过程,用于检查是否允许用户登录,并在被禁止的用户试图连接时抛出异常。
如果用户是一个具有集成登录的 Windows 用户组的成员,同时其用户 ID 具有显式集成登录,则使用该用户的集成登录连接到数据库。要防止用户使用他们的 Windows 用户组集成登录连接到数据库,您可以为该 Windows 用户创建一个到没有口令的数据库用户 ID 的集成登录。没有口令的数据库用户 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_check 的过程,供 login_procedure 选项调用。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 |