用户X的SQL登录失败...仅支持Windows身份验证。

15

大家好,我在SQL和C#交互方面遇到了一些麻烦。我正在通过设置程序中的脚本创建数据库和登录,然后实际的客户端程序应该登录,但每次运行客户端程序时,它都会崩溃,并且我在日志文件中得到以下错误信息。(顺便说一句:客户端程序可以在另一台机器上的现有数据库上工作。)

sql登录失败,用户为'user'。 原因:使用SQL身份验证尝试登录失败。 该服务器仅配置为使用Windows身份验证。 [CLIENT: ] 错误18456,严重性:14,状态:58

这些是用于创建登录/用户的命令...

CREATE LOGIN [user] WITH PASSWORD='pass', DEFAULT_DATABASE=[data], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
EXEC sys.sp_addsrvrolemember @loginame = N'user', @rolename = N'sysadmin'
EXEC sys.sp_addsrvrolemember @loginame = N'user', @rolename = N'serveradmin'
USE [data] CREATE USER [user] FOR LOGIN [user] WITH DEFAULT_SCHEMA=[dbo]

我错过了什么?
感谢您的帮助!


你尝试过在用户名前添加域名吗?例如:myDomain\user - Abe Miessler
1个回答

31

您的SQL Server实例仅支持Windows身份验证。您的创建用户脚本试图创建SQL用户帐户,但由于数据库实例仅支持Windows身份验证,因此会失败。

要允许您的数据库支持创建用户语句,请打开SSMS。右键单击服务器,然后单击“属性”。转到安全选项卡,并将服务器身份验证从Windows身份验证模式更改为SQL Server和Windows身份验证模式。

完成后,您的脚本可能会正常工作。


实际上,在创建时它不会失败,而是在尝试使用它登录时失败。服务器属性的更改有效,但如何编写脚本呢?我宁愿不要在所有客户机器上安装SSMS来完成这个任务。 - dave k
从Windows模式到混合模式的安全更改是一次性的更改。由于它只需要进行一次,您无需担心在所有客户机上安装SSMS。据我所知,这是在安装SQL Server时必须指定的内容,或者是可以在SSMS中覆盖的内容,请参见https://dev59.com/XHM_5IYBdhLWcg3wZSTX获取详细信息。 - Shan Plourde
我正在开发的程序使用微软的集成发布服务,可以一键安装我的先决条件之一——SQL Server 2008 Express版。它只在安装数据库服务器时要求我同意最终用户许可协议(EULA)。那么,我的选择真的只限于安装SSMS或手动安装MSSQL '08 Express并将其更改为SQL Server和Windows身份验证模式吗?还是我已经在注册表中找到了一种方法……真的很想编写一个查询来完成这个任务…… - dave k
你是否可以通过Microsoft Integrated Publishing Services进行控制?如果它可以通过命令行脚本安装SQL Server,那么如果你可以更改命令行脚本,就有一个名为/SECURITYMODE的参数可用于指定数据库的混合模式,请参见http://msdn.microsoft.com/en-us/library/ms144259.aspx。我怀疑SQL Server Express支持相同的选项。 - Shan Plourde
没有找到任何命令行或其他方式来编辑安装程序的控件。真是个悲伤的日子。不过还是感谢大家提供的帮助! - dave k
1
注意:我一直在费尽心思地想弄清楚为什么在我更改了安全设置以允许“SQL Server和Windows身份验证”之后,它仍然无法登录,并向事件日志报告SQL Server未设置为允许SQL身份验证。对于我来说,重新启动SSMS还不够。我必须“重启”SQL Server实例服务(也会重启SQL Agent)。然后它就完美地工作了。 - atconway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接