为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
编辑: 面试啦 发布时间: 2023-07-10 19:29:05
答: 出于安全原因需要这些权限。请考虑下列简单存储过程:
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 语句引用的)的正确权限来保护数据免受未授权的操作。
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 语句引用的)的正确权限来保护数据免受未授权的操作。
上一篇:如何查找和删除数据库中的重复数据 下一篇:如何高效率的查找一个月以内的数据
面试题库导航
- C++面试题
- JAVA面试题
- Oracle面试题
- MySQL面试题
- Linux面试题
- 网络工程师面试题
- 网管面试题
- 软件工程师面试题
- PHP面试题
- .net面试题
- 软件测试面试题
- EJB面试题
- Spring面试题
- Javascript面试题
- Python面试题
- QTP面试题
- Servlet面试题
- J2EE面试题
- Database面试题
- ASP面试题
- Unix面试题
- Loadrunner面试题
- 通信面试题
- 嵌入式面试题
- Ruby面试题
- Delphi面试题
- Mobile开发面试题
- SOA面试题
- JAVA面试题面试题
- 研发工程师面试题
- 软件架构师面试题
- 系统工程师面试题
- Android面试题
- JAVA程序员
- C#面试题