【问题标题】:Sql Server Schemas, one private area per person, but have read access to othersSql Server Schemas,每人一个私有区域,但对其他人有读取权限
【发布时间】:2015-06-21 04:09:38
【问题描述】:

我需要一个数据库,它实际上是人们为自己创建统计数据并与他人共享的“游戏”区域。

我有一个充满核心数据的只读数据库。所有用户都有读取权限。

我想要第二个“游戏”数据库,其中“n”个人可以查询“核心”数据库并在那里创建自己的表、Sp 等。我希望这些用户每个都有一个架构。我希望他们创建的所有内容都默认添加到他们的架构中,除非他们在脚本中明确指定(即 [dbo])。我希望他们都能够协作并能够从其他用户架构中读取数据(并查看 sps),但不能在其他用户架构中添加对象或执行 sps。

这些用户使用 2014 管理工作室来运行这些查询。它们都使用集成安全性(Windows)进行身份验证。

这个可以吗?

我尝试为用户设置默认架构,但默认情况下,当他们添加表时,它会转到 [dbo],因为 2014MS 中的属性网格默认为 [dbo],您必须对其进行编辑。如果他们只是输入“创建表 Table1”,我希望它进入他们的架构

我尝试让用户成为架构的所有者。我尝试将 public 设置为可以选择访问这些用户模式。但有些地方不对劲!

我原以为这是一种常见的设置,开发人员可以在单个数据库中获取自己的架构。或者,是否总是使用单独的数据库来实现这一点?我相信其他人会喜欢一个为几个用户设置这个的简短脚本:)

SQL Server 管理员不是我的主要领域,所以任何指导将不胜感激

【问题讨论】:

    标签: sql-server database schema


    【解决方案1】:

    对于测试用户User1,您可以创建架构UserSchema1 并执行以下操作

    我想要第二个“游戏”数据库,让 'n' 个人可以查询“核心”数据库

    您可以像这样使用户成为db_datareader 角色的一部分

    USE [CoreDatabase]
    GO
    exec sp_addrolemember db_datareader, 'User1'
    

    我希望他们创建的所有内容都默认添加到他们的架构中

    创建架构并添加适当的权限

    USE [PlayDatabase]
    GO
    CREATE SCHEMA [UserSchema1] AUTHORIZATION dbo;
    GO
    GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::UserSchema1 TO User1;
    
    GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO User1;
    

    为用户设置默认架构

    ALTER USER [User1] WITH DEFAULT_SCHEMA=[UserSchema1]
    

    更多信息请参考本帖

    https://dba.stackexchange.com/questions/21733/allow-user-to-do-anything-within-his-own-schema-but-not-create-or-drop-the-schem

    我希望他们都能够协作并能够从其他用户架构中读取数据(并查看 sps),但不能在其他用户架构中添加对象或执行 sps'。

    允许用户查看其他用户对象的定义并在播放数据库上做SELECT's

    USE [PlayDatabase]
    GO
    GRANT VIEW Definition TO [User1]
    GO
    exec sp_addrolemember db_datareader, 'User1'
    

    【讨论】:

    • 非常好,非常感谢,现在就试试吧。
    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2019-03-14
    相关资源
    最近更新 更多