【问题标题】:User/Role can Create table or view, but not select from it SQL Server 2008 - Ownership not passing to creator用户/角色可以创建表或视图,但不能从中选择 SQL Server 2008 - 所有权不传递给创建者
【发布时间】:2013-07-14 19:37:13
【问题描述】:

我正在尝试创建一个角色来授予少数用户创建和更改视图、过程和表的权限。 我不希望这些用户能够从/更新/删除/更改等中进行选择。any 数据库中的表,我们想要控制一些表 - 但他们应该具有完全权限在他们创建的任何对象上。

我已授予用户创建视图等的权限,并且效果很好,但他们无法从随后创建的视图中进行选择。可以这样做吗?

-- 2013 年 7 月 25 日添加

示例: 示例用户 Mike 对少数表授予了特定权限。全部授予,不否认。 除了“连接”之外,没有其他数据库级别的权限 Plus 是公众成员(未更改 - 不否认),以及我们设置的其他 3 个角色

角色:Standard_Reader 对多个表的特定选择权限。全部授予,不否认。 没有其他数据库级权限

角色:SensitiveDemographicsReader 敏感表的特定选择权限。全部授予,不否认

角色:分析师 没有特定的担保物 数据库级权限: 创建函数 创建程序 创建表 创建视图

此用户可以创建表或视图,但一旦创建,便无法从中进行选择。

是否可以设置 SQL 服务器,以便每当用户创建表或视图时,他们就有权从中进行选择(假设他们对视图中的基础表具有权限)

-- 编辑

经过一些调查,很明显,出于某种原因,在我们的数据库中,对象的所有权并未归属于其创建者。

使用此代码找到

select so.name, su.name, so.crdate from sysobjects so join sysusers su on so.uid = su.uid
order by so.crdate

所有所有者,除了几个例外都是 DBO。

我不明白为什么所有权没有传递给对象的创建者。知道是什么原因造成的吗?

【问题讨论】:

    标签: sql sql-server-2008 security permissions roles


    【解决方案1】:

    我会发表评论但缺乏特权;你看过MySQL table permissions吗?这是一个相当不错的系统。

    【讨论】:

    • 谢谢你,但恐怕我使用的是 MS SQL Server 2008 而不是 MySQL
    • 您是否有兴趣使用GRANT SELECT ON (table name) TO (user name) 命令,例如?
    • 在此基础上,很难否认您拥有剑拔弩张的机智,但在您急于使用它时,您却错失了重点——这里的目标是用户,已经创建了表,无需干预即可访问它。相当多的系统可以根据所有权自动为对象设置不同的安全性 - 在创建对象时将所有权分配给创建者。我想知道这在 SQL 中是否可行。
    【解决方案2】:

    听起来您最初用来拒绝它们的方法是覆盖默认设置。您能否发布有关用户拥有哪些权限的更多信息?

    无法评论:(

    【讨论】:

    • 非常感谢。好的,所以您希望他们创建的对象的这些权限可以正常应用? (我做到了!)好的,我会挖掘出其他权限的详细信息,看看可能有什么干扰。我们的系统绝对没有“拒绝”权限 - 我们只是授予或不授予,所以希望它不会太纠结网络。
    【解决方案3】:

    您需要将架构上的 SELECT 授予用户/组:

    GRANT SELECT ON SCHEMA::dbo TO User/Group;
    

    【讨论】:

      猜你喜欢
      • 2011-04-16
      • 2020-11-10
      • 2012-02-29
      • 1970-01-01
      • 2015-02-08
      • 2012-03-23
      • 1970-01-01
      • 2010-11-23
      • 2020-07-23
      相关资源
      最近更新 更多