我希望允许用户通过ASP页面在我的数据库上运行查询,但是我希望将此查询限制为只读。
我会尝试尽可能多地检测ASP本身(检测单词丢弃,更新,删除等)而不是在这些场景中运行查询,但是,有没有办法我可以只添加一个标志我的ASP提交它以使其以只读方式执行时的查询,无论其内容如何?
我意识到,如果可以的话,更新/删除/删除语句会出错 - 这很好。
我还想避免将整个数据库甚至表设置为只读。
我也不想以任何形式复制我的数据库。
谢谢你的帮助。
丹
答案 0 :(得分:0)
谢谢Allan S. Hansen,我使用了用户名/密码方法,效果很好。
答案 1 :(得分:0)
您的查询应该是动态的。主要问题 - sql注入。 我推荐这种方式:
脚本: (1)
USE [your_db]
GO
CREATE ROLE [DYNAMIC_SQL]
GO
GRANT SELECT ON [dbo].[your_table] TO [DYNAMIC_SQL] AS [dbo]
***
(2)
CREATE USER [dynamic_sql_proxy] WITHOUT LOGIN WITH DEFAULT_SCHEMA = [dbo]
ALTER ROLE [DYNAMIC_SQL] ADD MEMBER [dynamic_sql_proxy]
(3)
CREATE PROCEDURE [dbo].[dynamic_sql__call]
@err_code INT OUTPUT
,@err_msg NVARCHAR(4000) OUTPUT
,@sql NVARCHAR(MAX)
WITH EXECUTE AS 'dynamic_sql_proxy'
AS
BEGIN
SET @err_code = 0;
SET @err_msg = SPACE(0);
BEGIN TRY
EXEC(@sql);
END TRY
BEGIN CATCH
PRINT 'Please handle your error';
END CATCH;
RETURN @err_code;
END;