VB.net 2010 视频教程 VB.net 2010 视频教程 VB.net 2010 视频教程
  • sql语句大全之sp_executesql 或者 EXECUTE 执行动态sq

  • 2018-12-15 22:37 来源:未知

新疆25选7开奖号码 www.d1dx0.cn 当 sp_executesql 或 EXECUTE 语句执行字符串时,字符串将作为它的自包含批处理执行。
SQL Server 会将字符串中的一个或多个 Transact-SQL 语句编译为独立于批处理(包含 sp_executesql 或 EXECUTE 语句)执行计划的执行计划。

跟权限有什么关系?也就是说通过 sp_executesql 或 EXECUTE执行的sql被编译为独立的批处理,并不是当前用户可以直接执行的,还是通过问题来说明吧。

 

创建用户

直接上例子,创建一个用户,通过一个用户执行非动态sql的存储过程和动态sql的存储过程看这其中的权限问题

 

以新创建用户的身份执行非动态sql和动态sql的存储过程

创建一个非动态sql的存储过程,授权给ReadWriteUser执行这个存储过程的权限

以ReadWriteUser这个用户的身份执行存储过程TestPrivilege_NoDynamic,没有问题

 

新创建一个以sp_executesql执行动态sql的存储过程,同样授权给ReadWriteUser这个存储过程的执行权限

以ReadWriteUser这个用户的身份执行存储过程TestPrivilege_WithDynamic,此时是执行失败的,即便是ReadWriteUser具有执TestPrivilege_WithDynamic这个存储过程的权限

  此时如果给ReadWriteUser授权表上的读的权限:grant select on T1 to ReadWriteUser,再次执行TestPrivilege_WithDynamic
  然后再执行存储过程,是没有问题的

  

  用户虽然有执行存储过程的权限,因为给User授予了执行存储过程的权限(grant execute on TestPrivilege_WithDynamic to ReadWriteUser)
  但是如果存储过程中有动态sql,就会出现“The SELECT(或者Insert,Update,Delete)permission was denied on the object '***'”
  此时就需要给User授予具体的表上的对应的SELECT(或者Insert,Update,Delete)权限,然后才能正常地执行包含动态sql的存储过程

  

  另外一种方式是在存储过程中WITH EXECUTE AS OWNER,
  WITH EXECUTE AS OWNER只需授予用户对??樽陨淼娜ㄏ?,而无需授予用户对被引用对象的显式权限。
  也就是说,在存储过程中加上了WITH EXECUTE AS OWNER,就不用再授予给用户具体对象的权限

  也即如下

  

相关教程
  • 灯光焰火艺术表演在青岛举行 2019-04-25
  • 刘鹏:抓住“特色”的同时也要看淡“特色” 2019-04-25
  • 图解:中国经济已现一大积极信号,你知道了吗? 2019-04-25
  • 坚守岗位守护绿城美丽与整洁 2019-04-24
  • 个税法迎第七次大修 起征点调至每年6万元 2019-04-24
  • 传Switch即将支持媒体应用 看电影听音乐不是梦传Switch即将支持媒体应用-行情资讯 2019-04-24
  • [大笑]山不在高,有仙则名,水不在深,有龙则灵,文不在多,逻辑通透则行! 2019-04-24
  • 高一年级组“经典永流传”诵读比赛精彩回顾—wydzx.blog的博客—强国博客—人民网 2019-04-23
  • 红薯-热门标签-华商生活 2019-04-23
  • 这是全国精气最为集中的地方 被称为中国丹田所在 ——凤凰网房产 2019-04-23
  • 2018高考今日鸣锣 分享作家们的高考故事:莫言曾说它"很坏" 2019-04-22
  • 南方都市报:中考结束遇上父亲节,考场外这一幕瞬间萌翻你,心都化了! 2019-04-22
  • 马克思主义通过指导无产阶级革命建立起部分社会财富公有制而改变了人类历史发展进程,离开部分社会财富公有制的建立来谈“改变人类历史发展进程”纯粹是无稽之谈。 2019-04-22
  • 北京高能时代环境技术股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-04-21
  • 6000元的借款,仅仅过了半年,就利滚利,垒高到超过百万元,需要借款人卖房抵债——万恶的驴打滚真是望尘莫及了[YY] 2019-04-21
  • 404| 920| 554| 734| 852| 505| 584| 519| 439| 4|