jco*_*and 8 sql-server-2008 security sql-server
所以我们可以使用 Windows 登录或混合模式,但是我们可以将 SQL Server 配置为仅使用内部登录并阻止所有 Windows 登录吗?
作为预防性(或反应性)过程添加所有潜在的 Windows 登录并将其设置为受限权限的唯一解决方案是什么?
小智 6
据我所知,无法在 SQL Server 2008 + R2 上禁用 Windows 身份验证:
http://msdn.microsoft.com/en-us/library/ms144284%28v=sql.105%29.aspx
唯一可以访问的 Windows 帐户是那些明确添加为登录名的帐户(或者是具有登录名的组的成员)。
它不能完全禁用,原因有两个:
安装时,为NT AUTHORITY\SYSTEM、NT SERVICE\SQLSERVERAGENT(或包含 SQL 代理服务帐户NT SERVICE\MSSQLSERVER的组)和(或包含 SQL 数据库引擎服务帐户的组)提供登录。这些是sysadminSQL Server 正常运行所需的级别登录。
虽然快速测试显示删除所有这三个登录名只会阻止 SQL Agent 重新启动(数据库引擎运行良好),但我确定还有其他功能依赖于其他两个登录名……它们是默认创建的出于某种原因,所以我不会惹他们。(仅供参考,如果您自己进行测试:SSMS 中登录的删除和创建脚本选项不会脚本服务器角色成员资格。)
在单用户模式下,sysadmin无论是否创建了“包含”这些用户的登录,都会自动授予本地管理员级别权限。当你把钥匙锁在车里时,这是一个衣架。
如另一个答案中所述,只有明确创建的 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
Run Code Online (Sandbox Code Playgroud)
当然,任何拥有足够权限的人都可以解决这个问题,但这是一个单独的问题......
| 归档时间: |
|
| 查看次数: |
8440 次 |
| 最近记录: |