可以在SQL Server 2008(或R2)上禁用Windows身份验证登录吗?


8

因此我们可以执行Windows登录或混合模式,但可以将SQL Server配置为仅使用内部登录并阻止所有Windows登录吗?

是否添加唯一可能的Windows登录并将其设置为受限特权(作为预防性(或反应性)过程)的唯一解决方案?

Answers:


5

由于以下两个原因,无法完全禁用它:

  • 在安装时,将为NT AUTHORITY\SYSTEMNT SERVICE\SQLSERVERAGENT(或包含SQL Agent服务帐户NT SERVICE\MSSQLSERVER的组)和(或包含SQL数据库引擎服务帐户的组)设置登录名。这些是sysadmin级别的登录名,SQL Server才能正常使用这些登录名。

    快速测试显示,删除所有这三个登录名只会阻止SQL Agent重新启动(数据库引擎正常运行),但我确定还有其他功能依赖于其他两个登录名……它们是默认创建的由于某种原因,所以我不会把它们弄乱。(仅供参考,如果您自己进行测试:SSMS中的登录名的“拖放并创建脚本”选项不会脚本化服务器角色成员身份。)

  • 在单用户模式下,sysadmin无论是否创建了“包含”这些用户的登录名,都会自动为本地管理员授予-level特权。这是用于将钥匙锁在车内的衣架。

如另一个答案中所述,只有显式创建的Windows登录名才能访问连接(我的原始评论不正确)-删除所有用户创建的Windows登录名足以阻止访问。

如果您需要更进一步并阻止Windows登录的创建,这是一个起点(基于策略的管理,至少在2008年不支持阻止这种情况的发生):

CREATE TRIGGER trg_PreventWindowsLogins
    ON ALL SERVER
    AFTER CREATE_LOGIN
AS
BEGIN

    SET NOCOUNT ON;

    IF (EVENTDATA().exist('/EVENT_INSTANCE[1]/LoginType[1]/text()[1] eq "Windows (NT) Login"') = 1)
    BEGIN
        RAISERROR(N'Not allowed to create Windows logins!', 16, 1);
        ROLLBACK;
    END

END

当然,拥有足够权限的任何人都可以击败它,但这是一个单独的问题...


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.