Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 数据库管理 » 启动并连接到数据库 » SQL Anywhere 数据库连接 » 使用集成登录

 

防止 Windows 用户组成员连接到数据库

有两种方法可以防止具有集成登录的 Windows 用户组中的成员使用该组的集成登录连接到数据库:

  • 为该用户创建一个到没有口令的数据库用户 ID 的集成登录。

  • 创建一个由 login_procedure 选项调用的存储过程,用于检查是否允许用户登录,并在被禁止的用户试图连接时抛出异常。

创建到没有口令的用户 ID 的集成登录

如果用户是一个具有集成登录的 Windows 用户组的成员,同时其用户 ID 具有显式集成登录,则使用该用户的集成登录连接到数据库。要防止用户使用他们的 Windows 用户组集成登录连接到数据库,您可以为该 Windows 用户创建一个到没有口令的数据库用户 ID 的集成登录。没有口令的数据库用户 ID 不能连接到数据库。

♦  创建到没有口令的用户 ID 的集成登录
  1. 将用户添加到数据库,但不提供口令。例如:

    CREATE USER db_user_no_password;
  2. 为该 Windows 用户创建映射到没有口令的数据库用户的集成登录。例如:

    GRANT INTEGRATED LOGIN TO WindowsUser
    AS USER db_user_no_password;
创建过程来防止 Windows 用户进行连接

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