授予对对象的 SELECT 权限

DBO*_*BOn 3 security sql-server permissions logins sql-server-2014

我不确定这是否是一个奇怪的问题,所以请让我知道我在下面描述的内容是否可行。

我们有一个服务器,它是由其他人配置的,我们没有人“添加到其中”。

截至目前,我只sa登录了所述服务器。

我正在通过

SQLCMD -E -S ".\SQLServer"
Run Code Online (Sandbox Code Playgroud)

然后通过

SELECT name FROM sys.syslogins
Run Code Online (Sandbox Code Playgroud)

输出是

sa
Run Code Online (Sandbox Code Playgroud)

我只想对表运行 SELECT 语句以查看值。

有什么我可以做的吗?

我曾尝试 DB 更改和可信赖,但由于我根本不是会员,因此我的访问被拒绝。

我只需要运行 SELECT 语句。

sep*_*pic 6

我只想对表运行 SELECT 语句以查看值。

有什么我可以做的吗?

要查找您对该对象的权限,您可以使用函数sys.fn_my_permissions

只需运行此查询即可找出您对该表的权限:

 use your_db;
 select *
 from sys.fn_my_permissions ('your_table_name', 'object')
Run Code Online (Sandbox Code Playgroud)

如果您SELECT对该对象没有权限,也许至少您SELECT对它的列的子集有权限。

在任何情况下,您都可以通过以下方式检查您的数据库权限:

 use your_db;
 select *
 from sys.fn_my_permissions (null, 'database')
Run Code Online (Sandbox Code Playgroud)

如果您很幸运并CONTROL在其中看到了许可,则有可能重新授予您缺失的许可。

甚至可能是这种情况:你是db_owner这个数据库的,但是有人DENY在这个表上显式地使用了你的用户。

有些db_owners低估了存在的力量db_owner,所以不要一开始就放弃

SELECT 权限被拒绝...

并继续探索您在服务器和感兴趣的数据库中拥有哪些权限。

首先,检查您的服务器级别权限,如下所示:

select *
from sys.fn_my_permissions(null, 'server');
Run Code Online (Sandbox Code Playgroud)

我认为您在服务器级别没有什么有趣的,至少从您所说的来看,您似乎缺乏VIEW ANY DEFINITION许可,当然您不是sysadmin

然后像这样检查您的数据库角色:

select *
from sys. user_token;
Run Code Online (Sandbox Code Playgroud)

这不仅为roles您提供了您所属的成员,而且还为您提供了users可以访问此数据库的所有信息。如果您是映射到此数据库的许多 Windows 组的成员的 Windows 登录名,它会很有用,因为 simpleselect user 将返回您的 win 帐户(我们Windows Authentication现在正在讨论)。

我想这就是我在你的情况下能给你的建议。探索您拥有哪些权限,您是哪些角色的成员,然后可能会获得对您表的访问权限

第二补充部分

现在我想给出我的版本,即OP 只能看到sa登录,而他不是sa,而在以 Windows 主体身份登录时看不到任何其他登录

是的,兼容性视图syslogins确实没有显示所有安全主体:至少它没有显示固定的服务器角色。但它与 Windows 主体没有问题,我也在 SQL Server 2014 上控制它。

那么OP怎么可能只sa在查询syslogins以Windows主体身份登录时才能看到呢?为什么他看不到自己的win登录,无论是win帐户还是win组,BUILTIN\Users或像这样的东西?

简单的答案可能是 OP 搞错了,确实看到了另一个登录信息,但告诉我们他只看到了 sa

我可以给出的另一个也是唯一的答案是: 根本没有映射到此服务器的 WIN USER

这种情况只能在版本重现2005/2008/2008 R2通过授予CONNECT SQLpublic角色

因此,这里的情景:我们是在SQL Server 2008 R2和某人授予CONNECT SQLpublic服务器角色。

那么,在这种情况下,ALL THE ACTIVE DIRECTORY 可以登录到 SQL Server,而根本不需要相应的登录!

在图中,Windows 主体hp2\Mary已成功登录到我的本地实例(实例不必是本地的,它只是我笔记本上的一个复制),根本没有任何相应的登录。

玛丽是不是成员BUILTIN\Administrators(也许有人甚至更好的丢弃登录都拥有素净摄制),她看到的登录是什么只sa

在此处输入图片说明

和执行OP的代码,她只得到了sa以及

在此处输入图片说明

只是为了证明没有假货,并且我的本地 2008 R2 实例充满了登录信息,并且不仅sa我附上了带有 2 个 SSMS 的笔记本的整个屏幕截图,第一个在系统管理员 Anna 下启动,另一个在没有权限的情况下登录,甚至没有映射:玛丽

在此处输入图片说明

更新 我想出了另一种可能导致 OP 看到的情况:

CONTAINED DATABASE
Run Code Online (Sandbox Code Playgroud)

从 2012 年开始,数据库可以配置为CONTAINED.

在这种情况下,数据库而不是服务器可以对用户进行身份验证。用户将只看到创建它的数据库和(惊讶!)syslogins视图,在我看来,它应该根本无法访问user,仍然显示sa主体。当然,它没有显示用户的成功登录,因为它根本不存在

在此处输入图片说明