SQL Server身份验证使用什么SQL Server登录?

时间:2013-01-24 17:57:50

标签: sql-server database security

我试图找出当我通过指定Integrated Security=No的连接字符串连接到SQL Server时使用的SQL Server登录,然后指定用户和密码。

请注意,我并不是指我正在指定的用户(我当然知道),而是用户映射到的用户。我刚才正在阅读有关SQL Server中登录与用户的内容,而且主要归结的一点是,您总是始终需要登录才能连接,然后是每个登录需要访问的数据库的用户。所以我在SSMS中查找映射到我总是在我关心的数据库上指定的用户的登录,但我看不到这样的登录。

Fyi,我要问的原因是,我需要获得此数据库的新遗留应用程序的许可,并且该应用程序已编码为使用SQL Server身份验证。我试图确定我是否只需要用户必要的数据库,或者我是否需要创建登录。但现在我已经对一般问题本身感到好奇。

编辑 - 对syslogins的快速查询仅显示2次登录。所以,我的理论是SQLS维持琐碎的“每用户1次”登录,但SSMS隐藏了它们,似乎并非如此

编辑 - 查询syslogins或sys.server_principals似乎具有误导性。在我有2个不同的工作SQLS(非Win)登录的数据库上,我以每个登录并从sys.server_principals中选择*。两个不同的答案:每次我得到sa和登录时我都登录了。我不会看到'其他'登录,虽然它显然在那里。我猜这可能与模式有关,我也很少知道。在任何情况下,我猜通常,登录确实存在于所有用户,但是当我连接到SSMS时,我不会看到所有这些登录。听起来不错吗?

解决(某种程度) 通过在我拥有sa的数据库上玩,很明显,如果您是sa,或者可能具有该特定权限,SSMS仅向您显示所有登录。否则,您的登录视图将受到限制。因此,为什么我没有看到我期待的登录,没有真正的谜团。显然SSMS隐藏了它们。我说'有点'和'显然'因为我从来没有遇到任何记录这个的东西。这只是一个观察。

感谢大家的帮助。

2 个答案:

答案 0 :(得分:4)

除非您要连接到包含的数据库,否则它是服务器级别的登录名。如果您指的是服务器级登录映射到的数据库用户,您可以使用:

找到
SELECT u.name 
FROM sys.server_principals AS l
INNER JOIN sys.database_principals AS u
ON l.sid = u.sid
WHERE l.name = 'user id in your connection string';

如果您没有使用包含的数据库,则可以按照以下方式配置用户:

USE master;
GO
CREATE LOGIN your_login_name 
  WITH PASSWORD = 'f00b@r!', CHECK_POLICY = OFF;
GO
USE your_database;
GO
CREATE USER your_login_name -- doesn't have to match, but should for sanity
  FROM LOGIN [your_login_name];
GO
-- then apply permissions of course.

答案 1 :(得分:1)

通常,登录映射到数据库用户

因此,例如,如果某种不幸的情况,应用程序期望数据库所有者访问

您可以在服务器上创建此登录名(如果它尚未存在),然后将其映射到相关数据库中的dbo用户。

如果它不是内置用户,那么您将不得不查看此旧版应用已经可以访问的数据库,找出它映射到的用户 在新数据库上创建该用户,设置所需的权限角色等 然后将登录映射到它。

sql server版本之间存在一些细微差别,因此很难一步一步地进行

如果应用程序登录映射到的用户是自定义用户,那么您将不得不在新数据库中找出等效项。不过必须具有相同的名称(除非应用程序正在使用它),它甚至可以拥有更多权限。