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)
这段代码有什么问题?
CREATE SCHEMA是创建多个对象的单个语句,需要删除分号.此外,CREATE SCHEMA仅支持表,视图和授权.你需要移出CREATE ROLE和CREATE 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)
| 归档时间: |
|
| 查看次数: |
33470 次 |
| 最近记录: |