2016-11-30 3 views
0

Я только что создал пользователя с именем ugestion (Я зарегистрирован как SYSTEM). Как я могу позволить ему управлять моим столом tblinstituciones? Я просто хочу, чтобы он контролировал эту конкретную таблицу. Какая правильная команда? Кажется, что ничего не работает, и я не хочу ставить «GRANT ALTER ANY TABLE TO ugestion», потому что я просто хочу, чтобы он мог управлять только этим конкретным. Должен ли я предоставить пользователю особые привилегии перед выполнением этой команды? И какую команду мне выполнить? Я выполнил некоторые команды до того, как, например, «GRANT ALTER TABLE ON tblinstituciones TO vugestion», но это не сработало. Я начинаю с oracle, sqlplus.Назначение таблицы пользователю (oracle, sql plus)

+1

Вы не можете. Во-первых, вы не должны создавать объекты в схеме SYSTEM. Во-вторых, вы можете дать пользователям возможность делать DML на таблице (вставить, обновить, удалить), но вы не можете дать пользователям возможность DDL на одной таблице. Реально, если вы хотите это сделать, вы должны создать таблицу в этой схеме пользователя. Вы могли бы, я полагаю, создать хранимую процедуру, которая у вас есть, что делает DDL в таблице и предоставить пользователю разрешение на выполнение этой хранимой процедуры, но это гораздо более сложный подход. –

+0

Спасибо, но я не знаю, как правильно это сделать. Спасибо, в любом случае, я уверен, что я пойму это лучше в будущем, и это кажется очень и очень полезным ... – Lorena

ответ

0

Первое:

При входе в систему в качестве системы, выполните следующую команду:

DROP TABLE SYSTEM.TBLINSTITUCIONES; 

Это будет избавиться от таблицы, созданной в схеме SYSTEM. Как уже упоминалось, вы не должны создавать таблицы или другие объекты в схемах SYSTEM или SYS.

следующее:

Выйти из учетной записи SYSTEM.

Следующая:

Войти как пользователь UGESTION.

Следующая:

CREATE TABLE UGESTION.TBLINSTITUCIONES 
    (put all your field definitions here); 

замена «поставить все ваши определения полей здесь» с определениями любые поля, которые необходимо создать в этой таблице. Вышеприведенное заявление не будет работать, пока вы это сделаете.

Удачи.

+0

Спасибо, что ТАК МНОГО. Я уже создал таблицу! Я буду иметь в виду не создавать таблицы как SYSTEM с этого момента. – Lorena

0

Оставить стол.

Пересоздайте, но в вашей команде CREATE TABLE, предварительно исправить имя таблицы с вашим именем пользователя ... а-ля

Create Table Scott.Stackoverflow (
A Integer, 
B Varchar2(20), 
C Clob); 

Где SCOTT будет схема/пользователь, которого вы хотите таблицу тоже принадлежать, и, конечно же, замените фактический DDL своим оригиналом.

Вы также можете сделать ...

CREATE TABLE SCOTT.STACKOVERFLOW AS SELECT * FROM ORIGINAL_TABLE; 

CTAS не будет захватывать вещи, как колонки комментарии, ограничения, индексы и т.д.

Теперь они владеют таблицу. Они могут делать с ними все, что захотят. Это их. Они могут отказаться от него. Они могут изменить его. Они могут вставлять/обновлять/удалять/усекать его. Они могут предоставлять привилегии другим.

Вы никогда не должны создавать объекты в схеме SYSTEM (OR SYS!) За то, что это стоит.

+0

Когда я выполняю вашу команду, он говорит, что мне не хватает левой скобки. Где я должен поставить круглую скобку? Если я напечатаю его так: «CREATE TABLE (username.tablename)»; это также дает мне ошибку. Спасибо за ваш ответ, хотя! – Lorena

+0

нет, я исправлю ответ – thatjeffsmith

0

Пользователь системы не должен использоваться для каких-либо объектов пользователя.Пожалуйста:

create table ugestion.tblinstituciones as select * from system.tblinstituciones; 
drop table system.tblinstituciones; 

Таким образом, будут перемещены как определение таблицы и данные (на самом деле вы создать новую таблицу с данными в новой схеме) от системы к пользовательской схеме.

Смежные вопросы