我有一个生产 SQL Server,它的系统数据库设置为 Latin1_General_CI_AS 但并非所有用户数据库都相同,有些是使用 SQL_Latin1_General_CP1_CI_AS 创建的,还有其他几个 - 它们是作为第 3 方应用程序安装等的一部分创建的。
在这些数据库中运行 Exec xp_logininfo 会导致典型的 COLLATION 错误。
有没有办法解决?(为备用排序规则复制和重新编码 xp_logininfo 版本?将所有数据库更改为相同的排序规则并遭受应用程序崩溃的后果 ..?)
所有的想法都表示赞赏。
编辑#1 我正在尝试审查并最终转向管理安全性和用户/登录。目前,如果我运行:
use DB1
GO
exec xp_logininfo
go
exec xp_logininfo 'domain\groupname'
go
exec xp_logininfo 'domain\username'
go
我得到 3 个数据集,1 个所有用户的列表,2 个组访问的详细信息和 3 个(凭借组成员身份)指定登录如何访问 DB1 中的数据
但是,如果我执行:
use DB2
GO
exec xp_logininfo
go
exec xp_logininfo 'domain\groupname'
go
exec xp_logininfo 'domain\username'
go
我得到 3 x '无法解决“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突......'
DB1 具有 Latin1_General_CI_AS 排序规则
DB2 具有 SQL_Latin1_General_CP1_CI_AS 排序规则
所有系统数据库都是 Latin1_General_CI_AS
希望这能解释更多...
如果有人知道一个好的安全审计工具,那么这就是我要去的地方。我有两个简单的问题:
1 - 谁可以访问这个数据库?
2 - 该用户可以访问哪些数据库?
我实际上在我的 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 上遇到了同样的问题。然后我做了一些测试。我发现如果我将数据库上下文切换到 master 本身,则不会发生错误。接下来我做了一个简单的技巧,而不是调用:EXEC xp_logininfo @CurrentUser 我做了:EXEC master.sys.xp_logininfo @CurrentUser 并且没有发生错误。即使您使用的是另一个版本,这也可能对您有用。
您使用的是什么版本的 SQL - 我在 SQL 2005 中没有遇到问题,系统数据库位于 Latin1_General_CI_AS 中,活动数据库位于 SQL_Latin1_General_CP1_CI_AS 中。它是否特定于特定版本的 SQL?
父亲杰克,
你能提供更多细节吗?您是否在 xp_logininfo 中使用任何参数?您是否在每个数据库中运行它?此外,最终目标是什么(即,您是将信息存储在某处,还是这是一个试图执行 xp_logininfo 的应用程序?)
其他一些系统过程可能有一种解决方法,但在我提出任何建议之前,我需要更多地了解你想要完成的事情。嗯……我想这就是我说“有什么要求?”的方式。