Время прочтения: 3 мин.
Получив доступ к неизвестной базе, мы первым делом знакомимся с ее структурой и наполнением с помощью панели объектов. Это хороший способ, если объектов не так много.
Данный материал поможет вам ознакомиться с тем, как осуществлять поиск данных и объектов в базе данных с помощью встроенных средств самих СУБД.
СУБД ORACLE:
Если нужно найти пользователей, которые существуют в БД, используем системное представление all_users:
SELECT username
FROM all_users;
С помощью системного представления all_tables можем вывести все табличные пространства, принадлежащие конкретному владельцу AUDIT:
SELECT DISTINCT tablespace_name
FROM all_tables
WHERE owner = 'AUDIT';
Выбираем табличное пространстве EXAMPLE (владельца AUDIT) и смотрим названия всех имеющихся там и доступных нам таблиц:
SELECT table_name
FROM all_tables
WHERE owner = 'AUDIT'
AND tablespace_name = 'EXAMPLE'
ORDER BY table_name;
Ищем все таблицы в пространстве EXAMPLE (владельца AUDIT), имена которых начинаются с ‘CLIENT’:
SELECT table_name
FROM all_tables
WHERE owner = 'AUDIT'
AND tablespace_name = 'EXAMPLE'
AND table_name LIKE 'CLIENT%';
Пробуем найти поля в таблицах пространства EXAMPLE (владельца AUDIT), имена которых предполагаемо содержат дату рождения ‘BIRTH’:
SELECT *
FROM all_tab_columns
WHERE owner = 'AUDIT'
AND tablespace_name = 'EXAMPLE'
AND upper(column_name) like upper('%BIRTH%')
Так же, при исследовании БД полезно пользоваться комментариями, если таковые имеются. В этом нам поможет системное представление all_col_comments.
Для примера, найдем поля, в которых указан комментарий с пояснением о содержании в поле данных о днях рождения:
SELECT *
FROM all_col_comments
WHERE upper(comments) like '%BIRTH%'
Или выведем комментарии ко всем полям таблиц, содержащих в названии ‘BIRTH’:
SELECT *
FROM all_col_comments
WHERE table_name like '%BIRTH%'
СУБД MSSQLServer
MS SQL Server для аналогичных задач использует иные представления.
Например, для поиска пользователей, которые существуют в БД или поиска иной дополнительной информация о пользователе, воспользуемся представлением sys.sysusers:
SELECT *
FROM sys.sysusers;
С помощью представления sys.schemas можно узнать информацию обо всех схемах БД:
SELECT *
FROM sys.schemas;
С помощью представления sys.databases можно получить информацию о существующих базах :
SELECT *
FROM sys.databases;
Наиболее удобным способом поиска объектов SQL Server, является запрос к системной таблице sys.all_objects, являющейся одной из ключевых для сбора информации об объектах, составляющих БД.
Попробуем найти объекты БД, содержащие в названии ‘%BIRTH%’:
SELECT object_id as [идентификатор_объекта],
schema_id as [идентификатор_схемы],
schema_name as [название_схемы],
name as [название_объекта],
type as [тип_объекта],
type_desc as [расшифровка_типа_объекта],
create_date as [дата_создания_объекта],
modify_date as [дата_последней_модификации_объекта]
FROM sys.all_objects
WHERE upper(name) like '%BIRTH%';
Выведем все поля-первичные ключи таблиц базы USERS:
USE USERS
SELECT A.name as [Наименование_таблицы],
B.name as [Наименование_столбца],
A.type_desc as [Тип_объекта]
FROM sys.objects A
Inner Join sys.all_columns B
On A.object_id = B.object_id
WHERE A.type='U'
And is_identity=1
Таким образом мы разобрали как найти объекты в базе данных с помощью встроенных средств самих СУБД. Данные подходы весьма упрощают поиск нужной информации в неизвестных нам базах.
Желаем удачи в исследованиях!