小编Rob*_*son的帖子

SSMS中的权限问题:"对象'extended_properties',数据库'mssqlsystem_resource',...错误229拒绝了SELECT权限"

这是最简单的repro案例.

  1. 创建一个全新的数据库.(我正在使用SQL 2005.)
  2. 在新数据库中创建登录,SQL用户和表(请参阅下面的示例代码).
  3. 启动SSMS并打开对象资源管理器,以新创建的用户身份登录.
  4. 尝试在对象资源管理器中打开"Tables"文件夹.

问题

失败,显示此错误消息.

消息文字:

标题:Microsoft SQL Server Management Studio
无法检索此请求的数据.(Microsoft.SqlServer.Management.Sdk.Sfc)
如需帮助,请单击:链接
附加信息:
执行Transact-SQL语句或批处理时发生异常.(Microsoft.SqlServer.ConnectionInfo)
对象'extended_properties',数据库mssqlsystemresource',schema'sys'拒绝SELECT权限.(Microsoft SQL Server,错误:229)
如需帮助,请单击:链接

该用户可以访问表和表中的记录.但是用户无法访问对象资源管理器中的表列表.

SELECT USER_NAME() AS CurrentUser, col1
FROM dbo.TestTable

CurrentUser col1
----------- ----
robg_test   1000
Run Code Online (Sandbox Code Playgroud)

我发现的唯一解决方法是为用户提供高于必要的权限(如db_datareader).

问题:

允许此用户在对象资源管理器中打开表列表所需的最低权限是多少?

我曾尝试授予用户dbo架构的各种权限,但这没有帮助.

另请注意,我使用SQL用户只是为了说明问题.最初的问题出在AD用户身上.

是serverfault中一个相对类似的问题.


SET NOCOUNT ON
USE master
GO
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'robg_test')
    DROP LOGIN [robg_test]
GO
CREATE LOGIN [robg_test]
WITH …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server security permissions ssms

21
推荐指数
2
解决办法
6万
查看次数

CONTEXT_INFO()和CONVERT

为了尝试为这个问题构建示例代码,我遇到了一个问题CONTEXT_INFO().

我正在做的是将int转换为varbinary(128),以便我可以将其传递给SET CONTEXT_INFO.我可以在执行SET之前将varbinary转换回int,但在I SET然后GET之后,即使varbinary值明显不为零,CONVERT也总是返回零.

二进制不是我的强项,所以我可能会错过一些简单的东西.

SET NOCOUNT ON
USE tempdb
GO

DECLARE @number         int
DECLARE @ContextInfo    varbinary(128)

SET @number =  16777216

SET @ContextInfo = CONVERT(varbinary(128), @number)

SELECT @number                     AS [@number]
SELECT @ContextInfo                AS [@ContextInfo]
SELECT CONVERT(int, @ContextInfo)  AS [CONVERT(int, @ContextInfo)]

SET CONTEXT_INFO @ContextInfo
GO

SELECT CONTEXT_INFO()               AS [CONTEXT_INFO()]
SELECT CONVERT(int, CONTEXT_INFO()) AS [CONVERT(int, CONTEXT_INFO()) (Zero)]
GO

DECLARE @ContextInfo    varbinary(128)

SET @ContextInfo = CONTEXT_INFO()

SELECT @ContextInfo                 AS [@ContextInfo]
SELECT CONVERT(int, @ContextInfo)   AS [CONVERT(int, @ContextInfo) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

6
推荐指数
1
解决办法
7333
查看次数

T/F:在过程中使用IF语句会产生多个计划

在回答这个问题时,KM说

如果您在SQL Server 2005之上或之上,您可以使用IF在同一过程中拥有多个查询,并且每个查询都会为其保存一个查询计划(相当于旧版本中的每个查询计划),请参阅我的答案中的文章或链接到适当的部分:sommarskog.se/dyn-search-2005.html#IF

HLGEM补充道

您也可以在早期版本的SQL Server中执行此操作.

我读了Sommarskog的优秀文章,但没有看到任何有关多个计划的内容.

在以后的研究中,我读报价这里自Gert德雷珀斯:

因为SQL Server每个存储过程只允许一个执行计划...

我不知道原始文章的日期或他所指的SQL Server版本.

有没有人有一个可靠的参考资料来讨论这个,或者更好的是,一个证明这是真的测试?

sql t-sql sql-server stored-procedures

4
推荐指数
2
解决办法
2205
查看次数