我需要创建一个执行以下操作的SQL Server存储过程:
我不知道如何执行第2步。有什么想法吗?
答案 0 :(得分:1)
有两种方法可以解决这个问题:
1)直接查询SQL Server表以查找匹配项。您可能需要浏览视图,而不是直接访问表。也许,从Sys.sql_logins
中选择*需要在Sys.sql_logins.password_hash
中找到一种散列密码的方法,以便与散列版本进行比较从SQL Server 2008开始,他们添加了函数PWDCOMPARE()。这显然是MS打算解决这个问题的方式。
所以,在2008年,我认为你会查询它 select * from Sys.sql_logins where name ='login'和PWDCOMPARE('password',Sys.sql_logins.password_hash)= 1
奇怪的是,我刚刚在SQL 2005上尝试了这个,并且该功能似乎存在。
2)通过调用OPENDATASOURCE()尝试连接到SQL服务器并测试失败。 OPENDATASOURCE()的MSDN页面位于:http://msdn.microsoft.com/en-us/library/aa276845(v=sql.80).aspx
答案 1 :(得分:1)
为什么不让SQL Server为您执行此操作。毕竟,这就是内置安全方案的用途。只需将用户(或角色)的权限授予包含数据查询的存储过程。然后,在调用SP的应用程序中,您将使用该用户的登录凭据打开与DB的连接。如果用户无效,则无法连接,您可以捕获异常。如果用户在数据库中有效但没有对存储过程的权限,则可以捕获异常。