Разное

Sql получить список таблиц: Список (показать) таблиц в базе данных MySQL

Содержание

Список (показать) таблиц в базе данных MySQL

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

В этой статье показано, как составить список таблиц в базе данных MySQL или MariaDB через командную строку.

 

Чтобы получить список таблиц в базе данных MySQL, используйте клиентский инструмент mysql для подключения к серверу MySQL и выполните команду SHOW TABLES.

Получите доступ к серверу MySQL:

mysql -u user -p

 

Из оболочки MySQL переключитесь на базу данных с помощью инструкции USE:

USE database_name;

 

Выполните следующую команду, чтобы получить список всех таблиц и представлений в текущей базе данных:

SHOW TABLES;

 

Вывод будет выглядеть примерно так:

+----------------------------+
| Tables_in_database_name    |
+----------------------------+
| actions                    |
| permissions                |
| permissions_roles          |
| permissions_users          |
| roles                      |
| roles_users                |
| settings                   |
| users                      |
+----------------------------+
8 rows in set (0. 00 sec)

 

Необязательный модификатор FULL покажет тип таблицы в качестве второго выходного столбца.

SHOW FULL TABLES;

 

Вывод будет выглядеть примерно так:

+----------------------------+------------+
| Tables_in_database_name    | Table_type |
+----------------------------+------------+
| actions                    | VIEW       |
| permissions                | BASE TABLE |
| permissions_roles          | BASE TABLE |
| permissions_users          | BASE TABLE |
| roles                      | BASE TABLE |
| roles_users                | BASE TABLE |
| settings                   | BASE TABLE |
| users                      | BASE TABLE |
+----------------------------+------------+

8 rows in set (0.00 sec)

 

Чтобы получить список таблиц без переключения на базу данных, используйте предложение FROM или IN, за которым следует имя базы данных:

SHOW TABLES FROM database_name;

 

Предложение LIKE можно использовать для фильтрации выходных данных c командой SHOW TABLES в соответствии с определенным шаблоном.

SHOW TABLES LIKE pattern;

 

Например, следующий оператор вернет все базы данных, имена которых начинаются с ‘open’:

SHOW TABLES LIKE 'permissions%';

 

+-------------------------------------------+
| Tables_in_database_name (permissions%)    |
+-------------------------------------------+
| permissions                               |
| permissions_roles                         |
| permissions_users                         |
+-------------------------------------------+
3 rows in set (0.00 sec)

 

Знак процента (%) означает ноль, один или несколько символов.

 

Показывать таблицы MySQL из командной строки

Чтобы получить информацию о таблицах из оболочки Linux, вы можете использовать либо команду mysql -e, либо команду mysqlshow, которая отображает информацию о базах данных и таблицах.

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

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

mysql -u user -p -e 'SHOW TABLES FROM database_name;'

 

Вывод отобразит список всех таблиц:

+----------------------------+
| Tables_in_database_name    |
+----------------------------+
| actions                    |
| permissions                |
| permissions_roles          |
| permissions_users          |
| roles                      |
| roles_users                |
| settings                   |
| users                      |
+----------------------------+

 

Вот пример использования команды mysqlshow:

mysqlshow database_name

 

Вы можете отфильтровать вывод с помощью команды grep.

 

Чтобы получить информацию о таблицах в базе данных MySQL, используйте команду SHOW TABLES.

Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как получить список всех таблиц в базе данных Microsoft SQL Server? | Info-Comp.ru

Если у Вас встала задача определить количество таблиц в базе данных Microsoft SQL Server, то данная статья Вам поможет, так как в ней мы рассмотрим несколько способов реализации того, как можно получить список всех пользовательских таблиц, включая некоторые их характеристики с помощью SQL запроса.

Всю информацию о таблицах и других объектах SQL сервера можно посмотреть в графической среде SQL Server Management Studio, но иногда требуется выгрузить данную информацию или просто получить к ней доступ, для того чтобы использовать ее, например, в своих SQL инструкциях, это можно сделать несколькими способами, и сейчас мы их рассмотрим.

Примечание! Примеры рассматривать мы будем в СУБД Microsoft SQL Server 2016 Express.

Получаем список всех таблиц с помощью представления информационной схемы

В Microsoft SQL Server есть специальная схема, предназначенная для получения информации о метаданных — это INFORMATION_SCHEMA. Подробно о ней мы говорили в материале – «Представления информационной схемы Microsoft SQL Server».

Для того чтобы получить информацию о таблицах в БД, существует представление информационной схемы TABLES. Допустим, нам нужно получить просто перечень таблиц, для этого пишем следующий SQL запрос (в моей тестовой базе всего одна таблица).

   
   SELECT TABLE_NAME AS [Название таблицы]
   FROM INFORMATION_SCHEMA.TABLES
   WHERE table_type='BASE TABLE'


В данном случае мы указали условие table_type=’BASE TABLE’, так как данное представление содержит еще и информацию о представлениях (VIEW).


Недостатком данного способа является то, что никакой больше полезной информации в представлении INFORMATION_SCHEMA.TABLES нет.

Получаем список всех таблиц с помощью системного представления sys.tables

Альтернативным способом и более удачным, если Вам нужна дополнительная информация о таблицах, является способ с использованием системного представления sys. tables. Давайте сейчас с помощью этого представления выведем список таблиц, а также получим дополнительные сведения о дате создания таблицы и дате последнего редактирования этой таблицы.

   
   SELECT name AS [Название таблицы],
           create_date AS [Дата создания],
           modify_date AS [Дата редактирования]
   FROM sys.tables


Получаем список всех таблиц с помощью системной процедуры

Еще одним способом получения списка таблиц в базе данных Microsoft SQL Server является использование системной процедуры sp_Tables, но, на мой взгляд, данный способ менее удобный, к тому же он возвращает также немного сведений, по сути, только название таблиц.

Для того чтобы получить сведения о таблицах в БД нам нужно указать параметр @table_type со значением ‘TABLE’, так как данная процедура возвращает еще данные о представлениях и системных таблицах. Следует обратить внимание на то, что значение параметра нужно заключать в двойные кавычки, а каждое значение типа в одиночные кавычки, так как через запятую возможно указывать несколько типов (например, для того чтобы получить таблицы и представления, в значение параметра нужно указать — «‘TABLE’, ‘VIEW’»). Также мы укажем параметр @table_owner, для того чтобы ограничиться одним владельцем.

   
   EXEC sp_Tables @table_owner = 'dbo', 
                           @table_type = "'TABLE'";


Вот мы с Вами и рассмотрели три возможности получения списка таблиц в Microsoft SQL Server. Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.

У меня все, пока!

Заметка! Для профессионального изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL.

Нравится1Не нравится

Как получить список и описание всех колонок в таблице Microsoft SQL Server? | Info-Comp.ru

В данной заметке будет рассмотрено несколько способов получения информации о столбцах таблицы в базе данных Microsoft SQL Server, например, мы научимся получать список колонок таблицы, включая их тип данных, с помощью SQL запроса.

Начну с того, что если Вам нужно просто визуально посмотреть, какие колонки или какой тип данных у той или иной колонке в таблице, то Вы для этого можете использовать графический функционал SQL Server Management Studio, а именно «Обозреватель объектов». Например, для того чтобы посмотреть информацию о столбцах таблицы, необходимо плюсиком открыть соответствующий контейнер.

Но если Вам необходимо выгрузить эту информацию или обработать ее в SQL инструкции, то в этом случае необходимо обращаться к системным объектам SQL Server с помощью языка SQL, как и к каким именно объектам обращаться мы сейчас и рассмотрим.

Примечание! Все примеры ниже мы будем рассматривать в Microsoft SQL Server 2016 Express. В базе данных создана тестовая таблица TestTable, она имеет всего три столбца.

Получаем список колонок таблицы с помощью представления информационной схемы

В Microsoft SQL Server существует специальная схема — INFORMATION_SCHEMA, которая содержит метаданные для всех объектов базы данных. В данной схеме есть представление COLUMNS, с помощью которого и можно получить информацию о колонках таблицы. Также в ней есть и другие полезные представления, о которых мы разговаривали в статье — «Представления информационной схемы Microsoft SQL Server».

А теперь допустим, нам нужно получить информацию о столбцах в таблице, например, имя столбца, тип данных и возможность принятия значения NULL, для этого мы напишем следующий запрос, в котором обратимся к представлению COLUMNS информационной схемы.


   
   SELECT TABLE_NAME AS [Имя таблицы],
           COLUMN_NAME AS [Имя столбца],
           DATA_TYPE AS [Тип данных столбца],
           IS_NULLABLE AS [Значения NULL]
   FROM INFORMATION_SCHEMA.COLUMNS
   WHERE table_name='TestTable'


Получаем список столбцов таблицы с помощью системного представления sys.columns

Также информацию о колонках таблицы можно получить с помощью системного представления sys. columns, но только в этом случае для получения точно такого же результата, как был выше, необходимо будет объединять несколько системных представлений, а именно sys.tables, sys.columns и sys.types, так как в представлении sys.columns есть только идентификаторы нужных нам данных.

   
   SELECT T.name AS [Имя таблицы],
           C.name AS [Имя столбца],
           DataType.name AS [Тип данных столбца],
           CASE WHEN C.is_nullable = 0 THEN 'NO' ELSE 'YES' END AS [Значения NULL]
   FROM sys.tables T
   LEFT JOIN sys.columns C ON T.object_id = C.object_id
   LEFT JOIN sys.types DataType ON C.user_type_id = DataType.user_type_id
   WHERE T.name='TestTable'


Получаем список колонок таблицы с помощью системной процедуры sp_columns

В SQL Server существует специальная системная процедура sp_columns, которая как раз и предназначена для получения информации о колонках таблицы.

   
   EXEC sp_columns TestTable


Какой из рассмотренных выше способов Вам подойдет и окажется удобней решать Вам, а у меня на этом все, удачи!

Заметка! Новичкам рекомендую посмотреть мой видеокурс по T-SQL для начинающих, с помощью него Вы «с нуля» научитесь работать с SQL и программировать на T-SQL.

Нравится3Не нравится

Как получить список баз данных в Microsoft SQL Server на T-SQL? | Info-Comp.ru

В этой небольшой заметке я покажу Вам два способа, как можно получить список баз данных на языке T-SQL в Microsoft SQL Server. Первый способ заключается в использовании системного представления sys.databases, второй — в использовании системной хранимой процедуры sp_helpdb.

Вы можете использовать тот способ, который Вам будет удобнее в той или иной ситуации, я со своей стороны дам несколько рекомендаций.

Получаем список баз данных с помощью представления sys.databases

Сейчас мы напишем SQL запрос с использованием системного представления sys.databases, который покажет нам список баз данных на экземпляре Microsoft SQL Server.

На мой взгляд, данный способ предпочтительней, так как представление sys.databases выводит детальную информацию о параметрах базы данных, которая может быть очень полезна.

В данном случае для примера мы выведем следующие параметры баз данных:


  • Идентификатор базы данных;
  • Название базы данных;
  • Дату создания базы данных;
  • Состояние базы данных;
  • Уровень совместимости;
  • Модель восстановления.

Более детально посмотреть обо всех параметрах, которые возвращает представление sys.databases, можете посмотреть в официальной документации по Transact-SQL – Системное представление sys.databases

   
   --Список баз данных
   SELECT database_id AS [ID], 
           name AS [Название],
           CONVERT(CHAR(10), create_date, 104) AS [Дата создания],
           state_desc AS [Статус],
           compatibility_level AS [Уровень совместимости],
           recovery_model_desc AS [Модель восстановления]
   FROM sys.databases


Выводим список баз данных с помощью процедуры sp_helpdb

Хранимая процедура sp_helpdb выводит меньше информации о параметрах баз данных, однако она показывает дополнительную полезную информацию, например, размер базы данных. Также данный способ предпочтительней, если список баз данных необходим клиентскому приложению, т.е. из клиента лучше вызывать хранимую процедуру, чем посылать SQL запрос SELECT.

Процедура sp_helpdb возвращает следующие данные:

  • name — Название базы данных;
  • db_size — Общий размер базы данных;
  • owner — Владелец базы данных;
  • dbid — Идентификатор базы данных;
  • created — Дата создания базы данных;
  • status – Список значений параметров базы данных, разделенный запятыми. Параметры представлены в формате «Параметр=Значение», в случае с логическими параметрами выводятся только названия включенных параметров;
  • compatibility_level — Уровень совместимости.
   
   --Список баз данных
   EXEC sp_helpdb


Теперь Вы знаете, как можно вывести список баз данных в Microsoft SQL Server. Если Вы начинающий программист и у Вас нет базовых знаний языка SQL, то я Вам рекомендую почитать книгу «SQL код» это самоучитель по данному языку. Книга написана мной, в ней я очень подробно рассказываю о языке SQL.

Заметка! Для комплексного изучения языка SQL и T-SQL рекомендую пройти наши онлайн-курсы по T-SQL, на которых используется последовательная методика обучения специально для начинающих.

У меня на этом все, пока!

Нравится1Не нравится

Получить все имена таблиц конкретной базы данных по SQL-запросу?

Я работаю над приложением, которое может работать с несколькими серверами баз данных, такими как «MySQL» и «MS SQL Server».

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

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

но он дает имена таблиц всех баз данных конкретного сервера, но я хочу получить имена таблиц только выбранной базы данных. Как я могу ограничить этот запрос, чтобы получить таблицы конкретного база данных?

14 ответов


вероятно, из-за того, как разные СУБД sql имеют дело со схемами.

попробуйте следующее

для SQL Server:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'

Для MySQL:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' 

для Oracle, я думаю, что эквивалент будет использовать DBA_TABLES.

376

автор: Michael Baylon


похищенные из здесь:

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

следующий запрос выберет все Tables в базе данных с именем DBName:

USE DBName
GO 
SELECT *
FROM sys. Tables
GO

23

автор: anishMarokey


USE DBName;
SELECT * FROM sys.Tables;

мы можем обойтись без GO на месте вы можете использовать точку с запятой ;.

15

автор: Gopal00005


просто поставить DATABASE NAME перед INFORMATION_SCHEMA. TABLES:

select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'

в mysql используйте:

SHOW TABLES;

после выбора БД:

USE db_name

8

автор: Lorenzo Lerate


Я не видел этого ответа, но эй, это то, что я делаю:

SELECT name FROM databaseName.sys.Tables;

6

автор: Dario Cimmino


для Mysql вы можете сделать просто. ПОКАЗАТЬ ТАБЛИЦЫ;

4

автор: Ashish Gupta


Exec sp_MSforeachtable 'Select ''?'''

1

автор: Amir Keshavarz


select * from sys.tables
order by schema_id      --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go

да oracle это:

select * from user_tables

то есть, если вы хотите только объекты, принадлежащие вошедшему в систему user/schema в противном случае вы можете использовать all_tables или dba_tables которая включает в себя системные таблицы.


основываясь на ответе Майкла Бейлона, мне нужен был список, который также включал информацию о схеме, и именно так я изменил его запрос.

SELECT TABLE_SCHEMA + '.' + TABLE_NAME as 'Schema.Table'
  FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'dbName'
  ORDER BY TABLE_SCHEMA, TABLE_NAME

USE dbName;

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME

Если вы работаете с несколькими схемами на сервере MS SQL, то выбор-ing TABLE_NAME без одновременного выбора TABLE_SCHEMA может иметь ограниченную выгоду, поэтому я предположил, что нас интересуют таблицы, принадлежащие известной схеме при использовании MS SQL Server.

Я проверил запрос выше с помощью SQL Server Management Studio, используя мою базу данных SQL Server, и с MySQL Workbench, используя базу данных MySQL, и в обоих случаях он дает таблицу имена.

запрос объединяет два разных запроса Майкла Бейлона в один, который затем может выполняться для любого типа базы данных. Первая часть предложения WHERE работает с базами данных MySQL, а вторая часть (после OR) работает с базами данных MS SQL Server. Это уродливо и логически немного неверно, поскольку он предполагает, что нет нежелательной схемы с тем же именем, что и база данных. Это может помочь тому, кто ищет один единственный запрос, который может выполняться на любом сервере базы данных.

0

автор: user3070485


ОБНОВЛЕНИЕ ДЛЯ ПОСЛЕДНЕЙ ВЕРСИИ MSSQL SERVER (17. 7)

SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'

или SELECT * для всех столбцов.


Как получить список всех таблиц в базе данных, используя TSQL?

Как лучше всего получить имена всех таблиц в конкретной базе данных на сервере SQL?

sql-server

tsql

database-table

Поделиться

Источник


Ray Vega    

06 октября 2008 в 17:53

19 ответов


  • Запрос для получения имен всех таблиц в базе данных SQL Server 2008

    Можно ли написать запрос, который даст мне имена всех таблиц в базе данных сервера SQL? Я работаю над некоторой документацией после факта в системе, которую я не создавал, и ищу ярлык, чтобы получить список таблиц в базе данных.

  • Список всех таблиц в базе данных

    Как я могу получить список всех таблиц в базе данных сервера SQL с помощью запроса. Мое намерение состоит в том, чтобы динамически отображать это на веб-странице.



1299

SQL Server 2005, 2008, 2012, 2014 или 2016:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

Отображение только таблиц из определенной базы данных

SELECT TABLE_NAME 
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE'

Или,

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
    AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )

PS: Для SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' 

Поделиться


ScottStonehouse    

06 октября 2008 в 18:00



189

SELECT sobjects. name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Вот список других типов объектов, которые вы также можете искать:

  • AF: Агрегатная функция (CLR)
  • C: CHECK ограничение
  • D: ограничение по умолчанию или DEFAULT
  • F: ограничение внешнего ключа
  • L: Журнал
  • FN: функция Scalar
  • FS: Assembly (CLR) scalar-функция
  • FT: Assembly (CLR) табличная функция
  • IF: в картонных таблицы-функция
  • IT: внутренняя таблица
  • P: хранимая процедура
  • PC: Assembly (CLR) хранимая процедура
  • PK: ограничение первичного ключа (тип — K)
  • RF: хранимая процедура фильтра репликации
  • S: системная таблица
  • SN: синоним
  • SQ: очередь обслуживания
  • TA: Assembly (CLR) DML триггер
  • TF: функция таблицы
  • TR: SQL триггер DML
  • TT: тип таблицы
  • У: стол пользователя
  • UQ: UNIQUE ограничение (тип — K)
  • V: Вид
  • X: Расширенная хранимая процедура

Поделиться


Micah    

06 октября 2008 в 18:02



79

SELECT * FROM INFORMATION_SCHEMA. TABLES 

или

SELECT * FROM Sys.Tables

Поделиться


StingyJack    

06 октября 2008 в 17:58




31

select * from sys.tables;

OR

SELECT * FROM INFORMATION_SCHEMA.TABLES 

OR

SELECT * FROM sysobjects WHERE xtype='U'

Поделиться


sunilkuamr    

03 мая 2012 в 13:09



23

USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

OR

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

Поделиться


Vikash Singh    

03 октября 2013 в 11:23



10

SELECT * FROM information_schema. tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012

Поделиться


Rasoul Zabihi    

13 августа 2013 в 07:45



9

exec sp_msforeachtable 'print ''?'''

Поделиться


Ray Vega    

06 октября 2008 в 17:53



8

SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(Стандарт SQL Server 2000; все еще поддерживается в SQL Server 2005.)

Поделиться


devio    

06 октября 2008 в 17:55



6

select * from sysobjects where xtype='U'

Поделиться


spoulson    

06 октября 2008 в 17:55



5

SELECT sobjects. name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

Поделиться


Erikk Ross    

06 октября 2008 в 17:56



4

Недостатком INFORMATION_SCHEMA.TABLES является то, что он также включает системные таблицы, такие как dtproperties и MSpeer_... таблиц, без возможности отличить их от ваших собственных таблиц.

Я бы рекомендовал использовать sys.objects (новая версия устаревшего представления sysobjects ), которая поддерживает исключение системных таблиц:

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables

Поделиться


Astrotrain    

27 сентября 2017 в 12:20



2

В SSMS, чтобы получить все полные имена таблиц в конкретной базе данных (E. g., «MyDatabase»):

SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM   MyDatabase.INFORMATION_SCHEMA.Tables
WHERE  [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]

Результаты:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • и т.д.

Поделиться


Scott Software    

13 октября 2017 в 03:10



2

Пожалуйста, используйте это. Вы получите имена таблиц вместе с именами схем:

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

Поделиться


vikashspeaks    

23 ноября 2017 в 17:28



1

вы можете просто выбрать свою базу данных в первую очередь

use database_name;

тогда просто наберите

show tables;

Поделиться


Erfan Ahmed    

20 января 2015 в 06:56



1

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA. TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

Поделиться


Developer    

07 июля 2017 в 04:35



1

Спасибо Рэю Веге, чей ответ дает вся пользовательская таблица в базе данных…

exec sp_msforeachtable ‘print’?»‘

sp_helptext показывает базовый запрос, который сводится к…

select * from dbo.sysobjects o 
join sys.all_objects syso on o.id =  syso.object_id  
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 
and o.category & 2 = 0 

Поделиться


Frank    

17 августа 2017 в 22:19



0

--for oracle
select tablespace_name, table_name from all_tables;

Эта ссылка может предоставить гораздо больше информации об этом
тема

Поделиться


Demietra95    

13 ноября 2015 в 12:34



0

Использование SELECT * FROM INFORMATION_SCHEMA. COLUMNS также показывает все таблицы и связанные столбцы.

Поделиться


Masoud Darvishian    

07 января 2019 в 07:43



0

Ну, вы можете использовать sys.objects , чтобы получить все объекты базы данных.

 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

OR

--  For all tables
select * from INFORMATION_SCHEMA.TABLES 
GO 

  --- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO

  --- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO

Поделиться


DarkRob    

16 февраля 2019 в 09:00


Похожие вопросы:

Как получить список таблиц в базе данных, используя MS SQL 2008?

Я хочу проверить, существует ли таблица в базе данных, а если ее нет, то создать ее. Как я могу получить список всех таблиц в текущей базе данных? Я мог бы получить список баз данных с SELECT таким…

Как я могу получить имена всех таблиц внутри базы данных?

EDIT2: нашел исправление! Я использовал номер нужной схемы вместо имени. Надо было подумать об этом раньше, правда! И я думаю, что сообщения об ошибках могли бы быть немного лучше. Спасибо за все…

Как усечь все таблицы в базе данных, используя TSQL?

У меня есть тестовая среда для базы данных, которую я хочу перезагрузить с новыми данными в начале цикла тестирования. Я не заинтересован в восстановлении всей базы данных — просто re-setting…

Запрос для получения имен всех таблиц в базе данных SQL Server 2008

Можно ли написать запрос, который даст мне имена всех таблиц в базе данных сервера SQL? Я работаю над некоторой документацией после факта в системе, которую я не создавал, и ищу ярлык, чтобы…

Список всех таблиц в базе данных

Как я могу получить список всех таблиц в базе данных сервера SQL с помощью запроса. Мое намерение состоит в том, чтобы динамически отображать это на веб-странице.

Как получить список всех контрольных ограничений в базе данных для всех таблиц конкретной схемы сразу, в Sybase ASE

Я использую следующий запрос, чтобы получить список всех ограничений одной таблицы в моей базе данных sp_helpconstraint ‘schema.tableName’ а затем я извлекаю Check Constraints из результирующего…

Oracle-получение полей всех таблиц в базе данных

Я знаю, что для поиска всех полей таблицы я должен использовать что-то вроде sqlplus > desc testtable; Здесь перечислены все поля таблицы (здесь testtable) Но теперь у меня есть список таблиц в…

Как получить список всех таблиц в двух разных базах данных

Я пытаюсь создать небольшой скрипт SQL (в среде SQL Server Management Studio), чтобы получить список всех таблиц в двух разных базах данных. Цель состоит в том, чтобы выяснить, какие таблицы…

Получить список всех имен таблиц из spring SimpleJdbcTemplate

Есть ли способ получить список всех имен таблиц в базе данных, используя Spring SimpleJdbcTemplate? Запрашиваемая база данных имеет значение Oracle, если это каким-либо образом помогает. Спасибо.

отображение всех таблиц с вашего сервера с помощью TSQL

Я хотел бы знать, возможно ли отобразить все таблицы с сервера, используя TSQL, даже если они из разных баз данных? Но как это сделать? Спасибо. NOTE : отображение всех таблиц, даже если они были…

Таблицы списка

SQL Server: как показать все таблицы

В зависимости от версии SQL Server, которую вы используете, метод запроса и возврата списка всех созданных пользователем таблиц может незначительно отличаться. Ниже мы кратко рассмотрим операторы TSQL, которые можно использовать для получения списка таблиц как для более старого SQL Server 2000, так и для более новой версии 2005 или более поздних версий.

Листинговые таблицы в SQL Server 2000

Для более старых версий SQL Server (таких как SQL Server 2000, хотя этот метод также поддерживается в SQL Server 2005 для обеспечения обратной совместимости), вам потребуется запросить SYS. SYSOBJECTS просмотр метаданных. SYS.SYSOBJECTS содержит строку для каждого объекта, который был создан в базе данных, включая хранимых процедур , представлений и пользовательских таблиц (которые важно отличать от системных таблиц .)

Таблица SYSOBJECTS содержит пару десятков столбцов данных, поскольку она должна содержать информацию практически обо всем, что добавляется на сервер с течением времени. Следовательно, чтобы найти список созданных пользователем таблиц (игнорируя системных таблиц ), нам нужно найти результаты, в которых столбец xtype (который определяет тип объекта для этой строки) равен значению U , что означает пользовательский стол .Результирующий оператор TSQL должен выглядеть так:

  ВЫБРАТЬ
  *
ИЗ
  СИСОБЪЕКТЫ
ГДЕ
  xtype = 'U';
ИДТИ
  

Примечание: поскольку SYSOBJECTS являются частью пространства имен SYS , при запросе SYSOBJECTS нет необходимости указывать, что SYSOBJECTS является частью глобального пространства имен SYS , поэтому мы можем опустить его, как показано в пример выше.

Это вернет список результатов всех созданных пользователем таблиц.Поскольку объем информации, возвращаемой при запросе всех столбцов, довольно велик, вы можете обрезать результаты, просмотрев только столбец name и, возможно, crdate (дата создания):

  ВЫБРАТЬ
  название,
  crdate
ИЗ
  СИСОБЪЕКТЫ
ГДЕ
  xtype = 'U';
ИДТИ
  

Листинговые таблицы в SQL Server 2005 или новее

Перечисление всех таблиц на сервере SQL при использовании более новой версии (SQL 2005 или выше) — это вопрос запросов к представлениям INFORMATION_SCHEMA , которые автоматически встроены в SQL Server.Это позволяет легко просматривать широкий спектр метаданных для этого конкретного экземпляра SQL Server, включая информацию о COLUMNS , ROUTINES и даже TABLES .

Вы можете заметить, что при использовании представления INFORMATION_SCHEMA.TABLES возвращается четыре столбца, но наиболее важным столбцом является TABLE_TYPE , который определяет, является ли таблица в этой строке реальной таблицей ( BASE TABLE ) или таблицей. вид ( ПРОСМОТР ).

Чтобы вернуть все представления таблиц и в одном запросе, выполните следующий оператор TSQL:

  ВЫБРАТЬ
  *
ИЗ
  INFORMATION_SCHEMA.TABLES;
ИДТИ
  

Также может быть целесообразно указать базу данных, которую вы хотите запросить:

  ВЫБРАТЬ
  *
ИЗ
  databaseName.INFORMATION_SCHEMA.TABLES;
ИДТИ
  

Если вы хотите получить только фактические таблицы и отфильтровать представления из результатов, добавьте предложение WHERE TABLE_TYPE = 'BASE TABLE' :

  ВЫБРАТЬ
  *
ИЗ
  databaseName.INFORMATION_SCHEMA.TABLES
ГДЕ
  TABLE_TYPE = 'БАЗОВАЯ ТАБЛИЦА';
ИДТИ
  

Как вывести список всех таблиц в Oracle

Как и в случае с большинством реляционных баз данных, может возникнуть ситуация, когда вам понадобится просмотреть базовые метаданные и просмотреть фактический список таблиц и владельцев вашей базы данных. К счастью, в Oracle есть несколько способов выполнить эту относительно простую задачу, поэтому мы кратко рассмотрим каждый вариант ниже, чтобы найти тот, который лучше всего соответствует вашим потребностям.

Что такое словари данных Oracle?

Словарь данных в Oracle — это набор таблиц, доступных только для чтения, которые предоставляют полезную информацию о базе данных, включая схемы, пользователей, привилегии и даже данные аудита. Значения в этих хранимых словарях автоматически обновляются Oracle каждый раз, когда на сервере выполняется инструкция, изменяющая данные.

Оттуда словари, доступные только для чтения, могут быть прочитаны и запрошены, как и любая стандартная таблица, которая, как мы увидим ниже, обеспечивает некоторые очень полезные функции.

Просмотр таблиц, принадлежащих текущему пользователю

На самом базовом уровне вы можете просмотреть список всех таблиц , принадлежащих текущему пользователю Oracle. Это может быть выполнено с помощью простого запроса SELECT к словарю данных USER_TABLES .

После подключения к Oracle выполните следующую инструкцию:

  ВЫБРАТЬ
  table_name, owner
ИЗ
  user_tables
СОРТИРОВАТЬ ПО
  владелец, table_name
  

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

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

В ситуации, когда вас интересует только то, к каким таблицам текущий пользователь Oracle имеет доступ , независимо от владельца, вы вместо этого воспользуетесь словарем данных ALL_TABLES .

  ВЫБРАТЬ
  table_name, owner
ИЗ
  all_tables
СОРТИРОВАТЬ ПО
  владелец, table_name
  

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

  ВЫБРАТЬ
  table_name, owner
ИЗ
  all_tables
ГДЕ
  owner = 'schema_name'
СОРТИРОВАТЬ ПО
  владелец, table_name
  

Просмотр всех таблиц

Наконец, когда вам абсолютно необходимо просмотреть каждую таблицу в системе, обратите внимание на отличный и мощный словарь данных DBA_TABLES .

  ВЫБРАТЬ
  table_name, owner
ИЗ
  dba_tables
ГДЕ
  owner = 'schema_name'
СОРТИРОВАТЬ ПО
  владелец, table_name
  

Важно отметить, что этот последний словарь DBA_TABLES может требовать привилегий пользователя сверх тех, которые есть у текущего пользователя. При необходимости вам может потребоваться предоставить привилегию SELECT ANY DICTIONARY или роль SELECT_CATALOG_ROLE . Более подробную информацию о предоставлении этих привилегий можно найти в официальной документации.

Как составить список всех таблиц в базе данных с помощью запроса

Самый простой способ получить все таблицы в конкретной базе данных — это просмотреть их список в проводнике объектов SQL Server Management Studio (SSMS).

Однако время от времени нам нужно больше, чем просто видеть имена таблиц. Как мы уже знаем, почти все можно сделать несколькими способами, но сегодня я покажу, как на самом деле перечислить все таблицы в базе данных (или базах данных) с помощью запроса !

Прежде чем мы углубимся, небольшое уточнение примеров: я хочу отображать только имена таблиц из одной конкретной базы данных, поэтому каждый пример будет с предложением WHERE, которое фильтрует для меня только имена определяемых пользователем таблиц (для более того, вы можете использовать ссылки ссылки).Итак, начнем!

I. Для старых версий, таких как SQL Server 2000, мы можем запросить системную таблицу sys.sysobjects , которая содержит по одной строке для каждого объекта, созданного в базе данных.

 ИСПОЛЬЗОВАНИЕ
[AdventureWorks2017]
ИДТИ


ВЫБРАТЬ
[название]
ИЗ
sys.sysobjects
ГДЕ
[xtype] = 'U'
 

II. SQL Server 2005 и 2008 предоставили нам системное представление INFORMATION_SCHEMA.TABLES Это позволяет нам легко просматривать широкий спектр данных для этой конкретной базы данных и возвращает по одной строке для каждой таблицы (для которой текущий пользователь имеет разрешения).

 ИСПОЛЬЗОВАНИЕ
[AdventureWorks2017]
ИДТИ


ВЫБРАТЬ
ТАБЛИЦА КАК [Имя]
ИЗ
INFORMATION_SCHEMA.TABLES
ГДЕ
TABLE_TYPE = 'БАЗОВАЯ ТАБЛИЦА'
 

III. Начиная с SQL Server 2008, мы получаем системное представление sys.objects , которое содержит строку для каждого определяемого пользователем объекта в области схемы, который создается в базе данных, включая скомпилированную в собственном коде скалярную определяемую пользователем функцию. Это представление на самом деле представляет собой «новое поколение» sysobjects , которое было включено в качестве представления для обратной совместимости.

 ИСПОЛЬЗОВАНИЕ
[AdventureWorks2017]
ИДТИ


ВЫБРАТЬ
[Название]
ИЗ
sys.objects
ГДЕ
[тип] = 'U'
 

IV. Угадайте что, снова версия 2008 года и снова просмотр. Другой системный просмотр sys.tables , который возвращает строку для каждой пользовательской таблицы в базе данных.

 ИСПОЛЬЗОВАНИЕ
[AdventureWorks2017]
ИДТИ


ВЫБРАТЬ
[Название]
ИЗ
sys.tables
ГДЕ
[тип] = 'U'
 

V. View sys.all_objects показывает ОБЪЕДИНЕНИЕ всех определяемых пользователем объектов в области схемы и системных объектов, а не «созданных в базе данных», как sys.объекты. Это в основном sys.objects, расширенный, чтобы также содержать объекты Microsoft System. Представление sys.all_objects содержит СОЕДИНЕНИЕ между sys.objects и sys.system_objects.

Если вы хотите искать только объекты, созданные пользователем, рекомендуется использовать представление sys.objects вместо этого. Потому что набор результатов будет содержать всех таблиц, которые не были созданы с базой данных. Например, расширенные таблицы событий trace_xe_action_map и trace_xe_event_map.

 ВЫБРАТЬ
[название]
ИЗ
sys.all_objects
ГДЕ
[тип] = 'U'
 

VI. Другой способ — использовать недокументированную хранимую процедуру sp_MSforeachtable , которая в основном используется для применения команды T-SQL к каждой таблице, существующей в текущей базе данных. Примерно так:

 ИСПОЛЬЗОВАНИЕ
[AdventureWorks2017]
ИДТИ


ЕСЛИ OBJECT_ID ('tempdb .. # Tables', 'U') НЕ ПУСТО
DROP TABLE # Tables

СОЗДАТЬ ТАБЛИЦУ # Таблицы
(
Имя таблицы NVARCHAR (256)
)

EXEC sp_MSforeachtable 'INSERT INTO #Tables SELECT' '?' ''

ВЫБРАТЬ
REPLACE (REPLACE ((RIGHT (TableName, LEN (TableName) - CHARINDEX ('.', TableName))),' [',' '),'] ',' ') AS [Имя]
ИЗ
# Таблицы
 

или просто распечатать весь набор результатов без очистки имени схемы

 ИСПОЛЬЗОВАНИЕ
[AdventureWorks2017]
ИДТИ


Процедура EXEC sp_MSforeachtable 'print' '?' ''
 

Мы уже на месте? Оставайся сильным, Последний! 😄

Похоже, у нас достаточно параметров для запроса списка таблиц базы данных, но как мы можем перечислить все пользовательские таблицы во всех базах данных?

VII. Это недокументированная хранимая процедура sp_MSforeachdb , которая находится в «главной» базе данных и позволяет нам повторять один и тот же оператор T-SQL для всех баз данных в экземпляре SQL Server.Эта системная процедура использует глобальный курсор и выполняет циклы для всего набора результатов (ВЫБРАТЬ имя FROM master.dbo.sysdatabases). Так что будьте осторожны, используя его в загруженных системах!

 ИСПОЛЬЗОВАНИЕ
[мастер]
ИДТИ

EXEC sp_MSforeachdb 'ИСПОЛЬЗОВАТЬ [?]
ЗАЯВИТЬ
@dbname NVARCHAR (128)

НАБОР @dbname = DB_NAME (DB_ID ())


ВЫБРАТЬ
@dbname как БД,
[Название]
ИЗ
sys.tables
ГДЕ
[тип] = '' U ''
А ТАКЖЕ
DB_ID ()> 4 - не sys базы данных
'
 

с использованием локальной переменной

 ИСПОЛЬЗОВАНИЕ
[мастер]
ИДТИ


ЗАЯВИТЬ
@cmd NVARCHAR (256)

SET @ cmd = 'ИСПОЛЬЗОВАТЬ [?]
ЗАЯВИТЬ
@dbname NVARCHAR (128)

НАБОР @dbname = DB_NAME (DB_ID ())


ВЫБРАТЬ
@dbname как БД,
[Название]
ИЗ
sys.столы
ГДЕ
[тип] = '' U ''
А ТАКЖЕ
DB_ID ()> 4 - не sys базы данных
'

EXEC sp_MSforeachdb @cmd
 

Эти примеры вернут нам количество наборов результатов, равное количеству баз данных в нашем экземпляре. Отсюда это может быть немного неудобно. Я бы предпочел другой синтаксис …

Например, используя табличную переменную

 ИСПОЛЬЗОВАНИЕ
[мастер]
ИДТИ

ОБЪЯВИТЬ ТАБЛИЦУ @AllTables
(
БД NVARCHAR (64),
[Имя] NVARCHAR (256)
)

ВСТАВИТЬ @AllTables (БД, [Имя])
EXEC sp_MSforeachdb 'ИСПОЛЬЗОВАТЬ [?]
ЗАЯВИТЬ
@dbname NVARCHAR (128)

НАБОР @dbname = DB_NAME (DB_ID ())


ВЫБРАТЬ
@dbname AS DB,
[Имя] КАК Имя
ИЗ
sys.столы
ГДЕ
[тип] = '' U ''
А ТАКЖЕ
DB_ID ()> 4 - не системные базы данных
'

ВЫБРАТЬ
БД,
[Название]
ИЗ
@AllTables
СОРТИРОВАТЬ ПО
БД АСК,
[Имя] ASC
 

или локальная временная таблица (для повышения производительности)

 ИСПОЛЬЗОВАНИЕ
[мастер]
ИДТИ


IF OBJECT_ID ('tempdb .. # Tables', 'U') НЕ ЯВЛЯЕТСЯ 

Список всех таблиц в базе данных с указанием количества строк и размеров

Чтобы получить количество строк в одной таблице, мы можем использовать функции COUNT (*) или COUNT_BIG (*), например.грамм.

ВЫБРАТЬ
COUNT (*) ОТ Sales.Customer

Это довольно просто для одной таблицы, но быстро становится утомительным, если таблиц много. Вот
— это несколько способов перечислить все таблицы, существующие в базе данных, вместе с количеством содержащихся в них строк.

Использование процедуры sp_MSForEachTable

Этот сценарий использует хранимую процедуру, которая не задокументирована Microsoft, хотя она широко известна.Это
выполнит оператор SQL для всех таблиц в базе данных. Поскольку мне нужен один набор записей, а не один
набор записей для каждой таблицы. Сначала я вставил результаты во временную таблицу. Я также использовал COUNT_BIG
функция, которая возвращает bigint и была введена в SQL Server 2000, если вы знаете, что количество строк не превышает
int или используете более раннюю версию, тогда используйте вместо нее COUNT (*). Код такой:

CREATE TABLE #RowCounts (NumberOfRows BIGINT, TableName VARCHAR (128))

EXEC sp_MSForEachTable ‘INSERT INTO #RowCounts
SELECT
COUNT_BIG (*) как NumberOfRows,
»? » Как имя таблицы
ИЗ ?’

ВЫБРАТЬ TableName, NumberOfRows
FROM #RowCounts
ORDER BY NumberOfRows DESC, TableName

DROP TABLE #RowCounts

Одним из недостатков этого подхода является то, что при больших размерах таблиц код может закончить сканирование таблицы, что займет много времени.

Использование sysindexes

Существует просмотр каталога, который предоставит нам эту информацию. Преимущество этого подхода в том, что он использует цифры, которые уже
был рассчитан SQL Server, поэтому он должен работать очень быстро. Вот сценарий:

ВЫБЕРИТЕ T.name
TableName, i.Rows NumberOfRows
FROM sys.tables T
JOIN sys.sysindexes I ON T.OBJECT_ID = I.ID
WHERE indid IN (0,1)
ORDER
BY i.Строки DESC, T.name

Сценарий использует кластеризованный индекс для получения информации (где indid = 1). Таблицы без кластерного индекса сохраняются
как кучу, но все еще есть строка в sysindexes (где indid = 0), содержащая rowcount.

Однако есть одно важное предостережение: цифры могут быть не совсем точными! Это потому, что SQL Server не всегда
держите эту челку в актуальном состоянии. К счастью, есть команда DBCC, которая обновляет эти цифры.Просто запустите эту команду перед
сценарий выше, чтобы убедиться, что цифры точны:

DBCC
ОБНОВЛЕНИЕ (0)

Использование процедуры sp_spaceused

sp_spaceused без параметров отображает дисковое пространство, зарезервированное и используемое всей базой данных. Однако, указав таблицу
name в качестве первого параметра будет отображать количество строк, дисковое пространство, используемое и зарезервированное таблицей. Мы можем использовать это с
Процедура sp_MSForEachTable, упомянутая выше, для получения результатов для каждой таблицы.Преимущество этого подхода в том, что он также показывает
пространство, используемое каждой таблицей (данные и индекс).

СОЗДАТЬ ТАБЛИЦУ
#RowCountsAndSizes (TableName
NVARCHAR (128), строки CHAR (11),

зарезервировано VARCHAR (18), данные VARCHAR (18), index_size VARCHAR (18),

неиспользуемый VARCHAR (18))

EXEC sp_MSForEachTable ‘INSERT INTO
#RowCountsAndSizes EXEC sp_spaceused »? » ‘

SELECT TableName, CONVERT (bigint, rows) AS NumberOfRows,

CONVERT (bigint, left (зарезервировано, len (зарезервировано) -3)) AS SizeinKB
FROM #RowCountsAndSizes
ORDER BY NumberOfRows DESC, SizeinKB DESC, TableName

DROP TABLE
#RowCountsAndSizes

Вот результат вышеуказанного запроса при запуске с базой данных AdventureWorks:

Как и в предыдущем подходе, может потребоваться запустить DBCC UpdateUsage, чтобы убедиться, что результаты точны (это также может
можно достичь, указав updateusage в качестве 2-го параметра хранимой процедуры).

Список таблиц в базе данных Oracle

Резюме : в этом руководстве вы шаг за шагом научитесь отображать таблицы в базе данных Oracle с помощью запросов из представлений словаря данных.

Если вы работали с MySQL, возможно, вы знакомы с командой SHOW TABLES , которая выводит список всех таблиц в базе данных:

 

SHOW TABLES;

К сожалению, Oracle не поддерживает напрямую команду SHOW TABLES .Однако вы можете перечислить все таблицы в базе данных, запрашивая их из различных представлений словаря данных.

Показать таблицы, принадлежащие текущему пользователю

Чтобы показать таблицы , принадлежащие текущему пользователю, вы запрашиваете из представления user_tables .

 

ВЫБРАТЬ имя_таблицы ОТ user_tables ЗАКАЗАТЬ ПО имя_таблицы;

Обратите внимание, что в этом представлении не отображается столбец OWNER . Кроме того, таблица user_tables не содержит других таблиц, которые доступны текущему пользователю.

Показать таблицы, доступные текущему пользователю

Чтобы показать все таблицы, которые в настоящее время доступны текущему пользователю, независимо от владельцев, вы запрашиваете из представления all_tables :

 

SELECT table_name ИЗ all_tables ЗАКАЗАТЬ ПО имя_таблицы;

Если вы хотите показать все таблицы определенного владельца, добавьте столбец OWNER в предложение WHERE , как показано в следующем запросе:

 

SELECT * ИЗ all_tables ГДЕ ВЛАДЕЛЕЦ = 'ОТ' ЗАКАЗАТЬ ПО имя_таблицы;

Показать все таблицы в базе данных Oracle

Чтобы показать все таблицы во всей базе данных Oracle, запросите из представления dba_tables следующим образом:

 

SELECT table_name ОТ dba_tables;

Если у вас нет доступа к представлению dba_tables , вы получите следующее сообщение об ошибке:

 

ORA-00942: таблица или представление не существует

В этом случае вы должны попросить администратора базы данных предоставить вашей учетной записи либо привилегии в представлении dba_tables, , либо привилегию SELECT ANY DICTIONARY , либо привилегию SELECT_CATALOG_ROLE .

На следующем рисунке показаны таблицы, которые могут быть возвращены из представлений user_tables , all_tables и dba_tables :

В этом руководстве вы узнали, как отображать таблицы в базе данных Oracle, запрашивая данные. представления словаря, включая user_tables , all_tables и dba_tables .

  • Было ли это руководство полезным?
  • Да Нет

Поиск имен таблиц для внедрения SQL

Извлечение имен таблиц для внедрения SQL-кода

Перед построением запроса на извлечение конфиденциальной информации злоумышленник должен знать, какие данные он хочет извлечь и где они хранятся в базе данных.В этой статье объясняется, как отображать имена таблиц. Чтобы упростить обучение, мы предполагаем, что была выявлена ​​некоторая уязвимость, связанная с внедрением SQL-кода, и злоумышленник знает, как использовать ее с помощью атаки на основе UNION. Это, безусловно, самый простой случай, но информация также может быть извлечена с помощью методов слепой SQL-инъекции.

Разрешения

Прежде всего, вам нужно знать, что вы сможете просматривать только те таблицы, к которым имеет доступ ваш пользователь базы данных. Другими словами, вы сможете перечислить только те таблицы, которые принадлежат вашему пользователю сеанса, или к которым пользователю были предоставлены определенные права.Все остальные таблицы будут казаться несуществующими.

Поиск имен таблиц в MySQL

В MySQL таблица information_schema.tables содержит все метаданные, относящиеся к объектам таблиц. Ниже представлена ​​наиболее полезная информация из этой таблицы.

  • имя_таблицы : имя таблицы.
  • table_schema : схема, в которой была создана таблица.

Вот пример, показывающий, как извлечь эту информацию из атаки UNION.

Пользовательский ввод.

1 И 1 = 2 UNION SELECT table_schema, table_name, 1 FROM information_schema.tables

Запрос создан.

ВЫБРАТЬ имя, описание, цену ИЗ продуктов ГДЕ категория = 1 И 1 = 2 СОЕДИНЕНИЕ ВЫБРАТЬ table_schema, table_name, 1 FROM information_schema.table

Если вы хотите ограничить список таблиц, возвращаемых в текущую схему, вы можете добавить предложение WHERE для фильтрации этого столбца в сочетании с функциями DATABASE () и SCHEMA () .

Поиск имен таблиц в SQL Server

SQL Server также поддерживает INFORMATION_SCHEMA, и вы должны извлекать информацию о таблицах, используя information_schema.tables . Обратите внимание, что эти данные происходят из sys.tables (systables для SQL Server 2000), но information_schema предоставляет уровень абстракции и должен быть вашим первым выбором. Наиболее интересные столбцы этого представления точно такие же, как и для MySQL.

  • имя_таблицы : имя таблицы.
  • table_schema : схема, в которой была создана таблица.

Как вы можете догадаться, пример, представленный для MySQL, также будет работать в SQL Server, но здесь он снова.

Пользовательский ввод.

1 И 1 = 2 UNION SELECT table_schema, table_name, 1 FROM information_schema.tables

Запрос создан.

ВЫБРАТЬ имя, описание, цену ИЗ продуктов ГДЕ категория = 1 И 1 = 2 СОЕДИНЕНИЕ ВЫБРАТЬ table_schema, table_name, 1 FROM information_schema.стол

Найдите имена таблиц в Oracle

Для Oracle дела обстоят немного иначе, поскольку эта СУБД не поддерживает information_schema. Объекты таблицы перечислены в системной таблице all_tables . Вот наиболее интересные столбцы, которые нужно искать в этом просмотре словаря данных.

  • имя_таблицы : имя таблицы.
  • владелец : Владелец таблицы.

И снова представленный ранее пример адаптирован для Oracle.

Пользовательский ввод.

1 И 1 = 2 UNION SELECT владелец, имя_таблицы, 1 ИЗ всех_таблиц

Запрос создан.

ВЫБРАТЬ имя, описание, цену ИЗ продуктов ГДЕ категория = 1 И 1 = 2 СОЕДИНЕНИЕ ВЫБРАТЬ владелец, имя_таблицы, 1 ИЗ всех_таблиц

Вот еще некоторая информация о представлениях словаря данных, которая может быть полезна.

  • all_tables : возвращает все таблицы, к которым текущий пользователь имеет доступ.
  • dba_tables : возвращает список всех системных таблиц (если у вас есть доступ, вам предоставлена ​​роль SELECT_CATALOG_ROLE или если у вас есть привилегия SELECT ANY DICTIONARY).
  • user_tables : возвращает только таблицы, принадлежащие текущему пользователю.

Обратите внимание, однако, что эти представления словаря немного отличаются друг от друга.

Дополнительная информация о таблицах

После того, как имена таблиц найдены, вы можете собрать информацию о столбцах в этой таблице.

Опубликовано в: Сбор информации

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *