【问题标题】:Permission Issue for SQL Server 2008 Stored Procedure Using Encryption使用加密的 SQL Server 2008 存储过程的权限问题
【发布时间】:2011-09-30 11:48:53
【问题描述】:

我已经安排了一个包含三个模式的数据库。在数据库用户下,我已将三个模式勾选为我正在连接的用户的自有模式(当时认为这是个好主意)。

但是,这似乎不允许我将有问题的 db 用户添加到存储过程的权限中,这些存储过程也在相同的三个模式下(不是 dbo)。我选择 db 用户,选择执行,然后单击确定。回去,权限就没有了。

我很确定我把数据库搞砸了,因为 Database User (General) 下的每个勾号都是灰色的。

我在开发 ASP.Net 站点时没有遇到任何权限问题,直到我尝试将客户数据传递到一个也加密客户密码的 INSERT 存储过程。调用 SP 时出现以下错误:

找不到对称密钥“myKey”, 因为它不存在或者你存在 没有权限。

我可以在SSMS中完美运行SP,密码加密很好。

我在哪里缺少提供权限?灰色的模式是问题吗?还是这是一个 ASP.Net c# 问题?

【问题讨论】:

  • 当您通过 SSMS 本地连接时,您的应用程序连接字符串是否使用与登录相同的用户登录?
  • 好点。我正在使用 Windows 身份验证。
  • 您的声明在这里,很可能您收到的错误消息是完全准确的。应用程序用户无权访问对称密钥“myKey”。希望这里的一位 MSSQS 人员能够在 sql 命令上为您指明正确的方向以添加这些权限。
  • 刚刚尝试使用相同的用户登录,但失败并显示相同的错误消息。所以看起来我搞砸了我在数据库中的权限。
  • 我真正不明白的是,我可以向有问题的 SP 添加公共或访客权限,但不能添加用户登录 - 只是不会留在权限列表中。

标签: c# asp.net sql-server-2008 database-permissions


【解决方案1】:

您需要使用 EXECUTE AS 将权限更改为有权打开加密密钥的 db 用户。

如果您在使用 EXECUTE AS USER='ASPUser' 后尝试执行 SP,您应该会遇到同样的问题。

这是一个视频链接,其中包含Security EXECUTE AS and SQL Injection 上的详细信息 和MSDN Entry on EXECUTE AS for proceduresEXECUTE AS USER

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 2011-09-22
    • 2011-05-04
    • 1970-01-01
    • 2012-04-18
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多