Не удается выбрать строки из таблицы с пользователем

Я создал пользователя и предоставил ему все разрешения, я использовал: GRANT ALL PRIVILEGES TO user1; но затем я попытался выбрать строки из таблицы, которую я создал с помощью администратора, например: select * from sys.table выдает сообщение об ошибке table or view doesn't exist

затем я сделал: Grant select on table to user1 и это сработало.

так все привилегии не включают выбор?

во-первых, никогда не создавайте/не изменяйте ничего в схеме sys.

OldProgrammer 05.05.2022 15:26

возможно, вы по ошибке набрали "из sys.table", попробуйте просто "выбрать * из таблицы"

Moebius 05.05.2022 15:32

@Moebius, таблица не была создана пользователем, поэтому префикс администратора не будет работать, и, кстати, это не сработало.

Rafik Bouloudene 05.05.2022 15:35

@OldProgrammer Я только начал с sql и oracle, поэтому я просто изучаю некоторые манипуляции.

Rafik Bouloudene 05.05.2022 15:37

@OldProgrammer - я не вижу, где OP создал или изменил что-либо в схеме SYS, не могли бы вы пояснить? Что я действительно вижу, так это то, что он создал другого пользователя, он дал этому пользователю все привилегии, и этот другой пользователь пытается прочитать данные из таблицы SYS. Это совершенно нормально (пока этот другой пользователь действительно должен иметь привилегии для доступа к данным SYS).

mathguy 05.05.2022 16:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как это часто бывает, Oracle использует слова «приблизительно».

В данном случае ВСЕ не означает «все». Из документации:

ВСЕ ПРИВИЛЕГИИ

Specify ALL PRIVILEGES to grant all of the system privileges listed in Table 18-1, except the SELECT ANY DICTIONARY, ALTER DATABASE LINK, and ALTER PUBLIC DATABASE LINK privileges.

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/GRANT.html#GUID-20B4E2C0-A7F8-4BC8-A5E8-BE61BDC41AC3

Обратите внимание на часть «кроме». «Все» должен означают «все», то есть «без исключения»; все же........

Относится к вашему вопросу: ВСЕ ПРИВИЛЕГИИ не включают ВЫБРАТЬ ЛЮБОЙ СЛОВАРЬ. Скорее всего, любая таблица или представление, из которых вы пытались выбрать, является таблицей словаря (или представлением); что объясняет, почему предоставление ВСЕХ ПРИВИЛЕГИЙ не сработало, но сработало предоставление доступа непосредственно к таблице/представлению.

Если вы хотите предоставить доступ ко всем объектам словаря, вы можете предоставить пользователю SELECT ANY DICTIONARY.

После того, как вы закончите играть с этими явными грантами, вы можете рассмотреть возможность предоставления системы роли тем пользователям, которые в них нуждаются (и Только для этих пользователей), вместо того, чтобы выискивать все такие исключения.

Другие вопросы по теме