仅允许在Oracle SQL中添加列/表/视图

仅允许在Oracle SQL中添加列/表/视图,sql,oracle11g,Sql,Oracle11g,假设我有一个平台,允许用户输入一些SQL查询并执行它们。 DB是Oracle 11.2 有没有办法限制用户创建表、创建视图和更改表添加列的操作 我看到的唯一方法是使用OracleDB11.2语法解析所有用户提供的查询。但这种方法非常繁琐,因为在免费访问中没有完整的语法(至少我找不到),实现一个语法需要几天,甚至几周。授予创建表和创建视图权限。 对于ALTER TABLE,为了限制只添加列,可以创建过程并授予EXECUTE: create or replace add_column( tableN

假设我有一个平台,允许用户输入一些SQL查询并执行它们。 DB是Oracle 11.2

有没有办法限制用户创建表、创建视图和更改表添加列的操作


我看到的唯一方法是使用OracleDB11.2语法解析所有用户提供的查询。但这种方法非常繁琐,因为在免费访问中没有完整的语法(至少我找不到),实现一个语法需要几天,甚至几周。

授予创建表和创建视图权限。
对于ALTER TABLE,为了限制只添加列,可以创建过程并授予EXECUTE:

create or replace add_column( tableName varchar2, columnDefinition varchar2 ) 
as
  execute immediate 'alter table '|| tableName || ' add column ' || columnDefinition; 
end;
/
(未测试)


altertable
语法是否有您不希望它们能够执行的方面?仅限于这三种DDL权限不是问题;在它们内部进行限制是不可能的。改变现有列或表的每个方面(当然除了添加列之外)都必须被拒绝。您至少应该使用来验证参数,以最小化SQL注入的可能性。不清楚OP是否可以让用户调用包而不是发出DDL命令,但肯定值得考虑。是的,不幸的是,我不能用过程替换“ALTER TABLE ADD”。此外,用户必须能够在中使用所有可能的子句,因此使用dbms_assert将相当困难。
GRANT EXECUTE on ADD_COLUMN to user2;