Созданный пользователь, теперь кто владеет созданными таблицами? - PullRequest
2 голосов
/ 13 июня 2019

Большая часть моего фона исходит от sql server, поэтому мне трудно работать с терминологией Oracle.

В sql server я создаю базу данных Sales и создаю объекты в Sales сcreate table dbo.MyTable {...}.Теперь я могу запросить эту таблицу с select * from Sales.dbo.MyTableManagement Studio я увижу мой стол dbo.Sales под Sales & Tables.Понятно, что эти объекты связаны с продажами.

Я пытаюсь сделать то же самое с Oracle.По-видимому, все может находиться в одной базе данных и что меняет схема.

Итак, после установки Oracle XE 11.2 я смог войти в SID XE с пользователем sys.

Как только я вошел в систему с sys, я создал пользователя SALESMANAGER и получил разрешения:

CREATE USER salesmanager IDENTIFIED BY mypassword;
GRANT CONNECT, RESOURCE, DBA TO salesmanager;

Теперь у меня есть пользователь и пустая схема с именем SALESMANAGER,Я вошел как SALESMANAGER, а затем создал таблицу Totals.Теперь таблица попадает под схему SALESMANAGER.

Я не хочу, чтобы они были под этой схемой;Я хочу, чтобы они попали под SALES.Если я создам другого пользователя SALES, я создам другую схему.

Я знаю, что моя логика неверна, поэтому любая помощь приветствуется.

1 Ответ

2 голосов
/ 13 июня 2019

Все, что вы сказали, правильно.

Если вы хотите, чтобы пользователь SALES содержал ваши таблицы, почему вы не создали его (но вместо этого создали SALESMANAGER)?

Итак: снова подключитесь как SYS, затем

drop user salesmanager cascade;
CREATE USER sales IDENTIFIED BY mypassword;

grant create session, create table to sales;

Не предоставляйте привилегии, которые вам не нужны. Особенно, не предоставляйте DBA (это важная роль). Если окажется, что вам потребуются дополнительные привилегии (конечно, вам понадобятся такие, как create view, create sequence, ...), предоставьте их.

Теперь подключитесь как sales и создайте таблицу totals.

Если вы хотите сохранить пользователя salesmanager, не бросайте его. Пользователь sales может затем предоставить определенные привилегии своим таблицам другим пользователям, включая salesmanager. Подключено как sales:

create table totals (id number, total number);
insert into totals (id, total) values (1, 100);
grant select on totals to salesmanager;

Подключите как salesmanager:

select * From sales.totals;    --> precede table name with its owner
...