浅析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无法创建表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
SQL Server 2008"阻止保存要求重新创建表的更改"的错误的解决方案是本文我们主要要介绍的内容,情况是这样的:我们在用SQL Server 2008 建完表后,插入或修改任意列时,提示:当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改. 如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了"阻止保存要求重新创建表的更改&qu
-
SqlServer编写数据库表的操作方式(建库、建表、修改语句)
学习要点: SQL之-建库.建表.建约束.关系SQL基本语句大全.txt举得起放得下叫举重,举得起放不下叫负重.头要有勇气,抬头要有底气.学习要加,骄傲要减,机会要乘,懒惰要除.人生三难题:思,相思,单相思. SQL之-建库.建表.建约束.关系.部分T-sql语句 ---创建库 创建库之前 先进行 查看数据库中是否 已存在 次数据库 有便删除 --- if exists(select * from sys.sysdatabases where name='ConstructionDB')begi
-
sql server建表时设置ID字段自增的简单方法
打开要设置的数据库表,点击要设置的字段,比如id,这时下方会出现id的列属性表 列属性中,通过设置"标识规范"的属性可以设置字段自增,从下图上看,"是标识"的值是否,说明id还不是自增字段 能够设置ID字段自增的字段必须是可自增的,比如int,bigint类型,而varchar类型是不可自增的.比如查看name的列属性时,可以看到"是标识"是否且不可更改. 点击"标识规范",展开后,点击"是标识"会出现下拉
-
CREATE FUNCTION sqlserver用户定义函数
创建用户定义函数,它是返回值的已保存的 Transact-SQL 例程.用户定义函数不能用于执行一组修改全局数据库状态的操作.与系统函数一样,用户定义函数可以从查询中唤醒调用.也可以像存储过程一样,通过 EXECUTE 语句执行. 用户定义函数用 ALTER FUNCTION 修改,用 DROP FUNCTION 除去. 语法 标量函数 CREATE FUNCTION [ owner_name.] function_name ( [ { @parameter_name [AS] scalar_p
-
sql server建库、建表、建约束技巧
下面给大家分享下sql server建库.建表.建约束技巧,下文介绍有文字有代码. --创建School数据库之前:首先判断数据库是否存在,若存在则删除后再创建,若不存在则创建-- --exists关键字:括号里边能查询到数据则返回'true' 否则返回'false' if exists(select * from sysdatabases where name = 'School') --exists返回'true'则执行删除数据库操作-- drop database School --exi
-
Sql Server 创建数据库脚本Create DATABASE
Create DATABASE HappyRelaxDB on( NAME='HappyRelaxDB',FILENAME='D:\Sunny_Project\HappyRelaxPro\HappyRelaxDB.mdf') LOG ON(NAME='HappyRelaxDB_log',FILENAME='D:\Sunny_Project\HappyRelaxPro\HappyRelaxDB_log.ldf') GO 以上黄色标记的为需要更改的内容
-
浅析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
-
浅析SQL Server的嵌套存储过程中使用同名的临时表怪像
SQL Server的嵌套存储过程,外层存储过程和内层存储过程(被嵌套调用的存储过程)中可以存在相同名称的本地临时表吗?如果可以的话,那么有没有什么问题或限制呢? 在嵌套存储过程中,调用的是外层存储过程的临时表还是自己定义的临时表呢? 是否类似高级语言的变量一样,本地临时表有没有"作用域"范围呢? 注意:也可以称呼为父存储过程和子存储过程,外层存储过程和内层存储过程.这些只是不同的称呼或叫法而已.我们这里统一使用外层存储过程和内层存储过程.后续文章部分不再述说. 我们先来看一个例子,如
-
浅析SQL Server的聚焦使用索引和查询执行计划
前言 上一篇<浅析SQL Server 聚焦索引对非聚集索引的影响>我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解. 透过索引来看查询执行计划 我们首先来看看第一个例子 1.默认使用索引 USE TSQL2012 GO SELECT orderid FROM Sales.Orders SELECT * FROM Sales.Orders 上述我们看到第2个查询的所需要的开销是第1个查询开销的3倍
-
深入浅析SQL Server 触发器
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:update.insert.delete这些操作的时候,系统会自动调用执行该表上对应的触发器.SQL Server 2005中触发器可以分为两类:DM
-
SQL Server中通用数据库角色权限的处理详解
前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除一些账号:取消一些账号的较大的权限等,例如,有一些有db_owner权限,我们取消账号的数据库角色db_owner,授予最低要求的相关权限.但是这种工作完全是一个体力活,而且是吃力不讨好,而且推进很慢.另外,为了管理方便和细化,我们又在常用的数据库角色外,新增了6个通用的数据库角色. 如下截图所示. 另外,为了减少授权工作量和一些重复的体力活,我们创
-
浅析SQL Server的分页方式 ISNULL与COALESCE性能比较
前言 上一节我们讲解了数据类型以及字符串中几个需要注意的地方,这节我们继续讲讲字符串行数同时也讲其他内容和穿插的内容,简短的内容,深入的讲解.(可参看文章<详解SQL Server中的数据类型>) 分页方式 在SQL 2005或者SQL 2008中我们是利用ROW_NUMBER开窗函数来进行分页的,关于开窗函数,我们在SQL进阶中会详细讲讲.如下: USE TSQL2012 GO DECLARE @StartRow INT DECLARE @EndRow INT SET @StartRow =
-
浅析SQL Server 聚焦索引对非聚集索引的影响
前言 在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任何意义,学习的过程必须同时也是一个思考的过程,无论是独立思考也好还是查资料也罢都是思考而非走马观花,要不然过一段时间又会健忘.简短的内容,深入的理解. 话题 非聚集索引定义:非聚集索引也是一个B树结构,与聚集索引不同的是,B树的叶子节点存的是指向堆或聚集索引的指针.你真的理解了吗??你能举出例子吗?
-
浅析SQL Server中的执行计划缓存(下)
在上篇文章给大家介绍了SQL Server中的执行计划缓存(上),本文继续给大家介绍sqlserver执行计划缓存相关知识,小伙伴们一起学习吧. 简介 在上篇文章中我们谈到了查询优化器和执行计划缓存的关系,以及其二者之间的冲突.本篇文章中,我们会主要阐述执行计划缓存常见的问题以及一些解决办法. 将执行缓存考虑在内时的流程 上篇文章中提到了查询优化器解析语句的过程,当将计划缓存考虑在内时,首先需要查看计划缓存中是否已经有语句的缓存,如果没有,才会执行编译过程,如果存在则直接利用编译好的执行计划.因
-
浅析sql server 公共表达式的简单应用
一.前言 现在做项目数据访问基本都会选择一种orm框架,它以面向对象的形式屏蔽底层的数据访问形式,让开发人员更集中在业务处理上,而不是和数据库的交互上,帮助我们提高开发效率:例如一些简单的insert.update,我们不需要写insert into...sql 语句,而是直接new一个实体对象,然后db.Insert(entity),看起来是那么清爽:像EF这样比较完善的orm,支持linq语法对数据库进行访问,写起来就更加爽了,有些人甚至认为开发人员可以不用会写sql语句了...但现实不会让
-
浅析SQL Server中的执行计划缓存(上)
简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询优化(Optimization,有时候也被称为简化).执行(Execution).除去执行步骤外,前三个步骤之后就生成了执行计划,也就是SQL Server按照该计划获取物理数据方式,最后执行步骤按照执行计划执行查询从而获得结果.但查询优化器不是本篇的重点,本篇文章主要讲述查询优化器在生成执行计划之
随机推荐
- dubbo的配置文件详解(推荐)
- select自定义小三角样式代码(实用总结)
- 邪恶的eval和new Function使用介绍
- 浅谈移动端之js touch事件 手势滑动事件
- 正则表达式匹配,替换,查找
- asp.net 需要登陆的网站上下载网页源代码和文件
- 用JSP操作Cookie
- JavaScript中的匀速运动和变速(缓冲)运动详细介绍
- 详解房卡麻将分析系列 "牌局回放" 之 播放处理
- Java数据结构及算法实例:三角数字
- 在JavaScript应用中实现延迟加载的方法
- 存取flex屏幕快照
- Java多线程中的单例模式两种实现方式
- 解析Runtime中shutdown hook的使用详解
- php中get_meta_tags()、CURL与user-agent用法分析
- 收藏的一个php小偷的核心程序
- Python插件virtualenv搭建虚拟环境
- Python学习之用pygal画世界地图实例
- Android EditText每4位自动添加空格效果
- vuejs移动端实现div拖拽移动