如果这个问题重复另一个已经提出的问题,我深表歉意。我搜索了几个小时,却没有找到适合我的情况。
期望的结果
使用SQL身份验证的用户具有Server1(默认实例)上的Database1的执行权限。用户执行存储过程,作为其过程的一部分,访问存储在Server1 \ Instance2上的数据库2。我希望它既安全又简单(两者都很重要)。
更多信息
我的Windows凭据可以访问两个实例(位于同一服务器上)。因此,我可以在登录时轻松执行存储过程。但是,我不想给用户我的访问权限。我还需要使用SQL登录名,因为该用户将不在域中。
我想要的是为存储过程提供仅针对该过程的访问级别。由于我是系统管理员,因此将为用户提供该过程所需的一切。如果我能做到这一点,我可能会为此目的创建一个帐户,而不是使用我的帐户,但是无论哪种方式都是安全的,因为我可以控制存储的proc的工作。
我尝试将“ WITH EXECUTE AS”语句放入存储的proc中,但无法获取Windows登录信息。当我将其放入时,编译存储的proc时会出现以下错误:
无法以用户“ domain \ jdoe”的身份执行,因为它不存在或您没有权限。
就像我说的,用户在两台服务器上都是sysadmin,所以我不确定它还需要什么。
我研究了以下内容:
- 可信任-我宁愿不公开我的数据库,这看起来很可怕
- 链接服务器-我不想授予额外的权限。我不信任其他数据库可以访问我的数据库,也不信任我的数据库可以访问所有其他数据库。
- 证书-这似乎很复杂而且很困难。除非我能找到一种非常简单的方法来做到这一点并加以维护,否则我不确定这样做是否值得。
- 所有权链接-再次令人恐惧。当我的目标是防止安全问题时,这似乎会引起更多的安全问题。
- 镜像用户-我什至在另一个服务器实例上创建了相同(显然是不同的SID)用户,并给了它相同的密码。不行
我觉得自己缺少明显的东西,但不确定是什么。由于我整天都在用头撞墙,所以我可能太近了以至于看不到它。如果有人可以帮我或指出正确的方向,我将不胜感激。我会说我已经阅读了很多MSDN文章(男孩,我讨厌他们-他们似乎从来没有告诉我我想知道什么)。我真正想要的是一个简单易学的教程,它将指导我如何进行操作。缺少这一点,即使是一般性的指示我需要走的方向也会有所帮助。