如何在Oracle SCHEMA上授予对ROLE的权限

Ove*_*owh 3 sql plsql oracle11g

我如何ROLE为SCHEMA的所有表格授予一些权限?
我编写了这段代码,但是在SQLDeveloper中它给出了一个错误.

CREATE SCHEMA AUTHORIZATION alberto;

CREATE TABLE Cucine (
  tipo varchar(1) primary key,
  descrizione varchar(200) not null
);

CREATE TABLE Quartieri (
  codice varchar(4) primary key,
  nome varchar(100) not null
);

CREATE TABLE Ristoranti (
  codice varchar(5) primary key,
  nome varchar(150) not null,
  indirizzo varchar(250),
  tipocucina varchar(1) references Cucine(tipo),
  codquart varchar(4) references Quartieri(codice)
);

CREATE TABLE CarteDiCredito (
  codcircuito varchar(4) primary key,
  nomecircuito varchar(100) not null
);

CREATE TABLE Convenzioni (
  circuito varchar(4) references CarteDiCredito(codcircuito),
  codristorante varchar(5) references Ristoranti(codice),
  primary key(circuito, codristorante)
);

CREATE ROLE turista;
GRANT SELECT ON ENTE_TURISTICO.* TO turista;
CREATE USER DBAEnte IDENTIFIED BY 12345;
CREATE USER vinni IDENTIFIED BY mosh;
GRANT dba TO DBAEnte;
GRANT turista TO vinni;
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

Jon*_*ler 6

CREATE SCHEMA是创建多个对象的单个语句,需要删除分号.此外,CREATE SCHEMA仅支持表,视图和授权.你需要移出CREATE ROLECREATE USER移出声明.以下是手册中的示例:

CREATE SCHEMA AUTHORIZATION oe
   CREATE TABLE new_product 
      (color VARCHAR2(10)  PRIMARY KEY, quantity NUMBER) 
   CREATE VIEW new_product_view 
      AS SELECT color, quantity FROM new_product WHERE color = 'RED' 
   GRANT select ON new_product_view TO hr; 
Run Code Online (Sandbox Code Playgroud)

要授予SELECT所有表,您需要动态SQL,如下所示:

begin
  for tables in (select table_name from all_tables where owner = 'ALBERTO') loop
    execute immediate
      'grant select on alberto.'||tables.table_name||' to turista';
  end loop;
end;
/
Run Code Online (Sandbox Code Playgroud)