2011-03-07 72 views
14

嘿大家,有一些SQL和C#交互的麻烦。我在安装程序中创建数据库和登录脚本,然后实际的客户端程序应该登录,但每次运行客户端程序时,它都会弹出,并在日志文件中出现此错误。 (顺便说一句:客户端程序在另一台机器上的预先存在的数据库上工作。)SQL登录失败,用户X ...只有Windows认证

SQL登录失败,用户'用户'。原因:尝试使用SQL身份验证登录失败。服务器仅配置为用于Windows身份验证。 [客户端:] 错误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] 

用于创建登录/用户的命令......什么?
感谢您的帮助!

+0

您是否尝试在用户之前添加域?例如:'myDomain \ user' – 2011-03-07 17:35:46

回答

31

您的SQL Server实例设置为仅支持Windows身份验证。您的创建用户脚本尝试创建一个SQL用户帐户,该帐户由于数据库实例仅支持Windows身份验证而失败。

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

一旦完成,您的脚本应该可以正常工作。

+0

实际上,它在创建时不会失败,它会尝试使用它登录失败。服务器属性的变化已经发挥作用,但脚本会做什么。我宁愿不将SSMS安装到我们所有的客户机器上,只是为了完成这一项任务。 – 2011-03-07 19:01:08

+0

从Windows到混合模式的安全更改是一次性更改。完成一次后,您无需担心在所有客户端计算机上安装SSMS。据我所知,这是你安装SQL Server时必须指定的东西,或者你可以在SSMS中重写的东西,请参阅http://stackoverflow.com/questions/1393654/how-to-change-from-sql-server -windows-mode-to-mixed-modesql-server-2008查看详细信息 – 2011-03-07 19:15:34

+0

我正在使用的程序使用微软的集成发布服务,只需点击一下即可安装我的先决条件。其中之一就是sql server 2008 express edition。它只会要求我在安装数据库服务器时同意EULA。所以我的选择真的限于安装SSMS或手动安装MSSQL'08 express将其更改为SQL Server和Windows身份验证模式? ...或者我只是在注册表中找到了一种方法...真的想编写一个查询来执行此操作... – 2011-03-07 19:45:45