我们有一个软件包,我们的客户可以安装在他们用户的笔记本电脑上。
安装程序的一部分运行 MS 的 Sql Server Express 2014。
我们将命令行选项传递给应该启用 SA 登录的安装程序,并将 sqladmin 权限授予 Windows BUILTIN\Administrators 组。
我们运行的安装程序命令行:
SETUP.EXE /QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL /INSTANCENAME=SQLEXPRESS /SQLSYSADMINACCOUNTS="BUILTIN\Administrators" /SECURITYMODE=SQL /SAPWD="ASecretPassword"
AIUI,/SECURITYMODE=SQL应该启用 SA 登录,/SQLSYSADMINACCOUNTS=应该授予 Windows 组的 sqladmin 权限。
关于这些论点的文档在这里:
在我尝试的每台机器上,以及在客户的机器上,我都可以在我们的安装程序日志中准确地看到该命令行。
但在客户的机器上,这些论点似乎没有生效。
当我运行以下查询时:
SELECT name, is_disabled
FROM master.sys.server_principals sp
JOIN master.sys.server_role_members sr
ON sr.member_principal_id = sp.principal_id
WHERE sr.role_principal_id = 3
在我安装了软件的机器上,我看到:
name type_desc is_disabled
sa SQL_LOGIN False
BUILTIN\Administrators WINDOWS_GROUP False
NT SERVICE\SQLWriter WINDOWS_LOGIN False
NT SERVICE\Winmgmt WINDOWS_LOGIN False
NT Service\MSSQL$SQLEXPRESS WINDOWS_LOGIN False
DESKTOP1\KT Developer WINDOWS_LOGIN False
这是我所期望的。
但是当用户在他的域中的机器上运行相同的查询时,安装我们的软件后,他会看到:
name type_desc is_disabled
sa SQL_LOGIN True
尽管我们已将参数传递给 Sql Server Express 安装,告诉它启用 SA 登录并为 BUILTIN/Administrators 添加授权。我们不仅没有看到 SA 已启用,也没有授予 BUILTIN/Administrators 管理员权限,我们也没有看到授予标准 Windows 服务的权限。
此时,我已经准备好告诉客户问题出在他们自己的安全组策略上,并告诉他们需要更改策略,我们无能为力。
但在我这样做之前,我一直在寻找确认已安装的 Sql Express 数据库没有我们告诉安装程序创建的管理用户的唯一原因是客户自己的组策略阻止它。
谁能想到可能发生这种情况的任何其他原因?
一些额外的说明。
这是多年来一直为许多客户服务的应用程序和安装程序。在 Windows 1809 升级后,它停止为一位客户工作。
在干净的笔记本电脑上安装失败,全新安装了 Windows 10,并且没有安装其他软件。
好吧,事实证明,在这种情况下,就像在许多其他情况下一样,当用户在他做某事后报告发生的事情没有任何意义时,这是因为用户要么没有告诉你正在发生的事情,要么他没有告诉你他在做什么。
在这种情况下,当用户安装到“干净”的机器上时,他正在安装的机器上安装了应用程序然后卸载,但没有卸载 SQL Server Express。
我对 Sql Server Express 安装的更改以启用 SA 和 BUILTIN\Administrators 没有生效,不是因为安全策略,而是因为如果 SQL Server Express 安装程序已经存在,它就不会运行。