为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限

2023-07-06   


答: 出于安全原因需要这些权限。请考虑下列简单存储过程:
   USE pubs
   GO
   Create PROCEDURE GeneralSelect @TableName SYSNAME
   AS
   EXEC (‘Select * FROM ‘ + @TableName)
   GO
   您可能希望您的存储过程发出一个与下面类似的调用:
   USE pubs
   EXEC GeneralSelect ‘authors’
   但是,请考虑传送给存储过程的下列顺序:
   USE pubs
   EXEC GeneralSelect ‘authors Drop TABLE authors’
   如果存储过程的创建者是 pubs 数据库中 db_owner 角色的成员,并且您的用户只需要对存储过程具有 EXECUTE ㄏ蓿?蚋妹?罱?境?authors 表。SQL Server 通过要求用户证明具有对数据库对象(通过动态 SQL 语句引用的)的正确权限来保护数据免受未授权的操作。


相关内容:

  1. 为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
  2. 不用游标的SQL语句有哪些
  3. SQL Server里面什么样的视图才能创建索引
  4. PHP如何去执行一个SQL语句
  5. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
  6. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?