热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

为什么COUNT(*)在SQLServer的所有表列上都需要SELECT权限?

如何解决《为什么COUNT(*)在SQLServer的所有表列上都需要SELECT权限?》经验,请帮忙看看怎么搞?

我最近遇到了一个问题,COUNT(*)要求用户对表的每一列都具有选择权限。即使'COUNT(*)'的规范明确指出

它不使用有关任何特定列的信息。

它只是返回结果中的行数。

因此,如果您想将表中的行数算作受限用户,则会获得权限异常。

这是一个例子:

CREATE TABLE [Product]
([name] nvarchar(100) null, [price] float)

CREATE USER Intern WITHOUT LOGIN;
DENY SELECT ON [Product] (price) TO Intern;

EXECUTE AS Intern;

-- Fails with "The SELECT permission was denied on the column 'price' of the object 'Product'"
SELECT COUNT(*) FROM [Product];

REVERT;

经过一些测试,我发现它甚至 SELECT COUNT(1) FROM [Product]不起作用。

有人可以解释这种行为背后的原因是什么吗?什么是允许Intern用户仍然获得的准确计数的解决方法Product

更新:我对实习生可以使用的解决方法最感兴趣。因此,即使对于管理员来说,创建视图是最佳实践,实习生也没有此选项。


推荐阅读
author-avatar
呼噜垃圾桶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有