浅析SQL Server授予了CREATE TABLE权限但是无法创建表

 更新时间:2020年12月08日 09:45:25   作者:潇湘隐者  
这篇文章主要介绍了SQL Server授予了CREATE TABLE权限但是无法创建表的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在SQL Server中,如果我想授予一个用户klb拥有创建表的权限,但是我又不想授予其数据库角色db_ddladmin,因为这样会扩大其权限,那么授予下面权限可行吗?如下所示:

USE AdventureWorks2014;
GO
GRANT CREATE TABLE TO klb;

那么这样授权是否就OK呢?答案是这样授权会报错“The specified schema name "dbo" either does not exist or you do not have permission to use it.”

需要授予下面权限,登录名klb才能真正的创建表。

USE AdventureWorks2014;
GO
GRANT ALTER ON SCHEMA::dbo TO klb

但是这样又会扩大登录名klb的权限(绕了一圈,又重回老路)。其实,SQL Server中如果新建一个用户模式(user-schema)的话,那么就可以解决这个问题。

CREATE SCHEMA test AUTHORIZATION klb

如果已经存在对应的用户模式

USE AdventureWorks2014;

GO

GRANT ALTER ON SCHEMA::test TO klb

按上面这样授权后,那么对比下面脚本,你就会发现klb可以在test这个模式下创建表,但是不能在dbo这个模式下创建表。其实这个也是SQL Server 用户模式分离设计的原因。

CREATE TABLE dbo.TEST (id INT); --报错
GO
CREATE TABLE test.TEST (id INT);--正常
GO

到此这篇关于浅析SQL Server授予了CREATE TABLE权限但是无法创建表的文章就介绍到这了,更多相关SQL Server无法创建表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 连接sql server2008数据库配置

    java 连接sql server2008数据库配置

    本篇文章给大家分享java连接sql server2008数据库配置的相关资料,需要的朋友可以参考下
    2015-09-09
  • SQL 中多表查询的常见连接方式详解

    SQL 中多表查询的常见连接方式详解

    本文介绍SQL中多表查询的常见连接方式,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全外连接(FULL OUTER JOIN)和交叉连接(CROSS JOIN),每种连接方式都有示例代码,展示了如何通过这些连接方式获取特定的数据结果,感兴趣的朋友一起看看吧
    2025-02-02
  • SQL  BETWEEN 的常见用法小结

    SQL  BETWEEN 的常见用法小结

    BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQL  BETWEEN 的常见用法,感兴趣的朋友一起看看吧
    2025-04-04
  • SQL年龄计算的两种方法实例

    SQL年龄计算的两种方法实例

    在做sql内容的时候遇到了问题,不知道如何根据出生日期计算年龄,所以整理出了计算年龄的两种方法,下面这篇文章主要给大家介绍了关于SQL年龄计算的两种方法,需要的朋友可以参考下
    2022-06-06
  • sql连接查询中,where关键字的位置讲解

    sql连接查询中,where关键字的位置讲解

    最近遇到一个觉得很有趣的sql题,可能对初学者和我这种菜鸟会有帮助,所以小编决定分享给大家
    2013-10-10
  • sql server建库、建表、建约束技巧

    sql server建库、建表、建约束技巧

    这篇文章主要介绍了sql server建库、建表、建约束技巧,首先在创建数据库之前先判断数据库是否已经存在,如何存在需先删除在创建,需要的朋友可以参考下
    2015-07-07
  • 浅谈tempdb在SqlServer系统中的重要作用

    浅谈tempdb在SqlServer系统中的重要作用

    tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。tempdb中的任何数据在系统重新启动之后都不会持久存在。因为实际上每次SQLServer启动的时候都会重新创建tempdb。这个特性就说明tempdb不需要恢复。
    2014-08-08
  • 探讨select in 在postgresql的效率问题

    探讨select in 在postgresql的效率问题

    这篇文章主要介绍了探讨select in 在postgresql的效率问题 的相关资料,需要的朋友可以参考下
    2016-04-04
  • SQL Server 2016里的sys.dm_exec_input_buffer的问题

    SQL Server 2016里的sys.dm_exec_input_buffer的问题

    这篇文章主要介绍了SQL Server 2016里的sys.dm_exec_input_buffer的相关资料,需要的朋友可以参考下
    2016-04-04
  • Android实现矩形区域截屏的方法

    Android实现矩形区域截屏的方法

    对屏幕进行截屏并裁剪有两种方式:早截图和晚截图,对于早截图和晚截图的概念大家通过本文详解学习。本文重点给大家介绍android实现矩形区域截屏的方法,需要的朋友参考下
    2017-01-01

最新评论