小编Pai*_*One的帖子

允许存储过程使用SQL Server 2012中的证书从系统表中进行选择

我正在尝试运行尝试从系统表中选择的存储过程时遇到与权限相关的问题.基本上我试图通过直接从sys.dm_tran_current_transaction表中获取我需要的数据来解决SQL Server 2012中sp_bindtoken系统存储过程的弃用问题.

我发现的一个解决方案是:

  • 创建证书
  • 从证书创建用户/登录
  • 授予用户VIEW SERVER STATE权限
  • 使用证书对存储过程进行签名
  • 执行存储过程,该存储过程在刚刚创建的用户的上下文中运行

这种方法似乎在SQL Server 2008 R2中运行良好.但是在SQL Server 2012中,即使脚本看起来运行正常,在运行时,存储过程也会在尝试从上面的系统表中进行选择时失败并显示权限错误.

我目前的脚本看起来有点像这样:

USE OurDatabase
GO

CREATE CERTIFICATE OurDatabaseProcCert
FROM FILE = 'C:\Path\To\OurDatabaseProcCert.cer'
WITH PRIVATE KEY (
FILE = 'C:\Path\To\OurDatabaseProcCert.pvk',
ENCRYPTION BY PASSWORD = '$0m3$tr0ngp@$$w0rd',
DECRYPTION BY PASSWORD = '$0m3$tr0ngp@$$w0rd');
GO

USE master
GO

CREATE CERTIFICATE OurDatabaseProcCert
    FROM FILE = 'C:\Path\To\OurDatabaseProcCert.cer'
WITH PRIVATE KEY (
    FILE = 'C:\Path\To\OurDatabaseProcCert.pvk',
    ENCRYPTION BY PASSWORD = '$0m3$tr0ngp@$$w0rd',
    DECRYPTION BY PASSWORD = '$0m3$tr0ngp@$$w0rd');
GO

CREATE LOGIN OurDatabaseServerLogin
    FROM CERTIFICATE OurDatabaseProcCert …
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures database-permissions sql-server-2012

11
推荐指数
1
解决办法
1057
查看次数