Sql server SQL Server-授予用户在其自己的模式中创建表的权限,但不允许在dbo模式中创建表
我不是DBA,但被要求帮助为一些公司内部的SQL类建立教学数据库。我使用的是Azure SQL Server数据库,每个学生都需要能够为自己创建表、视图和存储过程,但看不到其他学生的任何工作。由于成本限制,我无法为每个学生创建一个Azure DB并加载原始数据,所以我尝试在一个DB中完成所有工作 我的想法是:Sql server SQL Server-授予用户在其自己的模式中创建表的权限,但不允许在dbo模式中创建表,sql-server,database,database-design,azure-sql-database,database-administration,Sql Server,Database,Database Design,Azure Sql Database,Database Administration,我不是DBA,但被要求帮助为一些公司内部的SQL类建立教学数据库。我使用的是Azure SQL Server数据库,每个学生都需要能够为自己创建表、视图和存储过程,但看不到其他学生的任何工作。由于成本限制,我无法为每个学生创建一个Azure DB并加载原始数据,所以我尝试在一个DB中完成所有工作 我的想法是: 为每个学生创建一个模式,并授予他们写的权限 去吧 给他们从dbo模式读取的权限,其中 原始数据将被存储,但不会写入(我不想让他们有机会覆盖原始表) 隐藏所有其他学生模式,以便学生只能看到
- 为每个学生创建一个模式,并授予他们写的权限 去吧
- 给他们从dbo模式读取的权限,其中 原始数据将被存储,但不会写入(我不想让他们有机会覆盖原始表)
- 隐藏所有其他学生模式,以便学生只能看到他们的 表/视图/存储过程以及dbo模式中的表/视图/存储过程
USE MASTER
CREATE LOGIN student1 WITH PASSWORD = 'T3mpSuperSecret!';
USE class_DB
CREATE USER student1 FOR LOGIN student1;
CREATE SCHEMA st1 AUTHORIZATION student1;
GRANT SELECT ON SCHEMA :: dbo TO student1
GRANT CONTROL ON SCHEMA :: st1 TO student1
然后,我尝试将dbo中的一个基表选择到新模式中:
select *
into st1.inventories
from dbo.inventories
我得到:
Msg 262, Level 14, State 1, Line 1
CREATE TABLE permission denied in database 'class_DB'.
创建表权限似乎位于数据库级别,而不是架构级别。是否有方法在架构级别授权创建表权限
我希望这一切都有意义。再说一次,我不是DBA,因此任何帮助都将不胜感激
谢谢 授予
创建表
,而其他权限不起任何作用的是用户
也没有更改
权限。因此,您只需授予用户
对其特定架构的创建表
、创建视图
等权限,然后在dbo
架构上选择
这将使用withwith with LOGIN
作为示例,因为我没有LOGIN
对象,但这演示了授予和隐式拒绝的权限:
创建数据库SampleDB;
去
使用SampleDB;
去
创建表dbo.SomeTable(SomeID int-IDENTITY);
插入到dbo.SomeTable中
默认值;
去
创建用户student1,无需登录;
去
创建模式st1授权student1;
去
将SCHEMA::dbo上的SELECT授予student1;
将创建表、创建视图、创建函数、创建过程授予student1;
去
创建用户student2,无需登录;
去
创建模式st2授权student2;
去
将SCHEMA::dbo上的SELECT授予student2;
将创建表、创建视图、创建函数、创建过程授予student2;
去
以用户身份执行='student1';
去
创建表st1.TestTable(ID int);
插入到st1.TestTable中
选择SomeID
来自dbo.SomeTable;
去
挑选*
来自st1.TestTable;
去
还原
去
以用户身份执行='student2';
去
创建PROC st2.TestProc作为
开始
挑选*
来自st1.TestTable;
终止
去
EXEC st2.TestProc--失败
去
创建表st1.TestTable(ID int)--也失败了
去
还原
去
使用master;
去
删除数据库SampleDB;