SQLServer只赋予创建表权限的全过程

 更新时间:2022年04月12日 16:35:45   作者:OwenZeng_DBA  
在SQL Server中进行各种操作是非常常见的操作,下面这篇文章主要给大家介绍了关于SQLServer只赋予创建表权限的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

背景

今天客户问到一个问题。 我想新建一个账号给外部人员使用,但是我只想给他创建表的权限,这应该如何操作。开始可能认为这个问题很简单。

我新建一个登录账号A

USE [master]
GO
CREATE LOGIN [A] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

创建数据库级别的用户A

USE [security_test]
GO
CREATE USER [a] FOR LOGIN [a] WITH DEFAULT_SCHEMA=[dbo]
GO

赋予创建表的权限

GRANT CREATE TABLE TO A;

然后给他赋予创建表的权限

现在试试建表

CREATE TABLE test (id int)

提示如下信息:

这是什么情况?

解决办法1

创建表,每个表都是需要一个所有者,就是架构名。 对于我们的创建表语句  CREATE TABLE test (id int)  它其实默认使用的是 dbo架构。

A用户有了创建表的权限,还需要有dbo 架构的修改权限。 于是我们需要:

GRANT ALTER ON SCHEMA::dbo TO A;
GO 

但此时我们会遇到另外一个问题,就是加上这个权限之后,A用户除了create table 之外还能做drop table ,alter table等操作。

所以我们需要创建一个DDL 触发器 ,来阻止其他的操作

CREATE TRIGGER db_trigger_BlockNonTableDDL
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS
AS 
BEGIN 
   IF IS_MEMBER('A') = 1
   BEGIN 
 
      DECLARE @TriggerEventText nvarchar(max);
      SET @TriggerEventText = EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') 
      IF NOT ((@TriggerEventText LIKE 'CREATE TABLE%'))
      BEGIN
         RAISERROR (@TriggerEventText, 16, 1)
         ROLLBACK TRANSACTION; 
      END
   END; 
END; 
GO

解决办法2

如果,创建的表不需要使用默认的dbo架构 

那么可以给 给外部人员单独创建一个shchema 。给新建一个架构schema ,

create schema schema1 authorization dbo
go

然后

grant create table to A
grant alter, insert on schema::schema1 to A

此时,A仍然可以创建表,和删除表,但是他直接创建和删除属于它的架构的表。这也起到了限定权限的问题。

总结

到此这篇关于SQLServer只赋予创建表权限的文章就介绍到这了,更多相关SQLServer赋予创建表权限内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server降权运行 SQL Server 2000以GUESTS权限运行设置方法

    SQL Server降权运行 SQL Server 2000以GUESTS权限运行设置方法

    由于sql注入问题比较常见,很多黑客都是通过sqlserver数据库漏洞直接获取系统权限,所以sqlserver的安全设置尤为重要,简单简单分享下sqlserver低权限运行方法
    2014-07-07
  • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)

    SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)

    很多人在查看SQL语句等待的时候都是通过sys.dm_exec_requests查看,等待类型也是通过wait_type得出,sys.dm_os_waiting_tasks也可以看到session的等待那么有什么区别呢....,这篇文章给大家介绍SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上),需要的朋友参考下
    2015-12-12
  • 利用SQL语句给字段加注释的方法

    利用SQL语句给字段加注释的方法

    这篇文章介绍了利用SQL语句给字段加注释的方法,有需要的朋友可以参考一下
    2013-10-10
  • SQLserver2019 Express安装及其一些问题解决

    SQLserver2019 Express安装及其一些问题解决

    本文主要介绍了SQL server 2019 Express 安装及其一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • sqlserver 手工实现差异备份的步骤

    sqlserver 手工实现差异备份的步骤

    sqlserver 手工实现差异备份的步骤,需要的朋友可以参考下。
    2011-04-04
  • SQLServer2019安装教程图文详解

    SQLServer2019安装教程图文详解

    这篇文章主要介绍了SQLServer2019安装教程图文详解,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • SQL SERVER日志进行收缩的图文教程

    SQL SERVER日志进行收缩的图文教程

    这篇文章主要给大家介绍了关于SQL SERVER日志进行收缩的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用SQL SERVER具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 详解SQLServer和Oracle的分页查询

    详解SQLServer和Oracle的分页查询

    分页功能是我们的基本功,必须要牢固掌握。通过对分页算法的整理,希望对实现分页功能更得心应手了,需要的朋友可以参考下
    2015-09-09
  • 跨数据库实现数据交流

    跨数据库实现数据交流

    这篇文章主要介绍了跨数据库实现数据交流的两种方式,一是通过链接服务器,二是使用OPENDATASOURCE/OPENROWSET连接远程服务器,需要的朋友可以参考下
    2015-08-08
  • SQLSERVER简单创建DBLINK操作远程服务器数据库的方法

    SQLSERVER简单创建DBLINK操作远程服务器数据库的方法

    这篇文章主要介绍了SQLSERVER简单创建DBLINK操作远程服务器数据库的方法,涉及SQLSERVER数据库的简单设置技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论