SQL Server 2008 下 18456错误的解决办法

这个错误是在用SQLServer authentication登录SQLServer时产生的。Windows authentication错误的朋友们就不用往下看了。

网上给的很多办法都无法解决,其中一个原因是,没有注意在错误信息中还有State一项。

很多人会觉得,我遇到的State是1啊?为什么解决不了。今天在MSDN的一篇博客上看到说 message is kept fairly nondescript to prevent information disclosure to unauthenticated clients. The ‘State’ will always be shown to be ’1′ regardless of the nature of the problem.  意思就是说对于非认证用户,错误信息中的state将总是1。所以,需要用Windows authentication登录SQLServer,在Management|SQL Server Logs下,去查一下错误信息。这一次我看到的错误状态58。这个数在刚才的出错信息中是不会显示的。这就是为什么很多人查到的针对state=1的解决办法无法使用的原因。那么58表明我犯了个很弱的问题,就是要把Server设置为支持Window和SQLServer双认证方式。设置完后重启数据库服务器。

后续还遇到一个问题,VS通过SQL用户连接数据库时,出现 The SELECT permission was denied on the object ‘sysobjects’, database ‘mysqlsystemresource’, schema ‘sys’.的错误。mysqlsystemresource是SQL Server中一个系统隐藏数据库,public schema下的用户无法在里面使用SELECT。只需要把登录数据库的用户名的schema改到更高级别就可以了。

 

http://allenlsy.com/2011/05/06/sql-server-2008-%E4%B8%8B-18456%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/

你可能感兴趣的:(sql,数据库,server,schema,Authentication,sqlserver,数据库服务器)