Что такое схема в sql
Перейти к содержимому

Что такое схема в sql

Что такое schema в БД?

Что такое schema в postgreSQL? Её надо создавать сразу после создания БД? Это логическое устройство таблиц, наполнения, прав и т.д. И тогда может быть много схем и они могут использовать общие таблицы?

Отслеживать
задан 14 окт 2020 в 13:42
575 2 2 серебряных знака 13 13 бронзовых знаков
@Мелкий писал ответ на этот вопрос тут qna.habr.com/answer?answer_id=1423551#answers_list_answer
14 окт 2020 в 14:49
и тут теперь будет
14 окт 2020 в 14:54
@Мелкий может ли в одной схеме быть таблица из другой?
14 окт 2020 в 18:38

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

14 окт 2020 в 20:10

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Schemas are analogous to directories at the operating system level, except that schemas cannot be nested.

Схемы — это дополнительный уровень структурирования объектов базы. Похоже на директории в файловой системе или пространства имён ( namespace ) в программировании. Но не могут быть вложенными.

Пользуясь аналогией с файловой системой и вебом: есть файлы стилей CSS, какие-то JS. Ничто не мешает их все размещать в корневой директории веб-сервера. Но обычно их размещают всё-таки в поддиректориях для собственного удобства.

После создания новой базы у вас будет предопределённая схема public с правами для создания новых объектов для всех пользователей. Что делать дальше — решение разработчика схемы этой базы, проигнорировать схемы и размещать всё в public , структурировать как-либо по схемам, можно удалить public схему даже.

  • users
  • user_settings
  • user_favorites
  • blog_posts
  • blog_comments
  • users
  • users.settings
  • users.favorites
  • blog.posts
  • blog.comments

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

Большинство проектов схемы не используют.

Права: у схем есть права create — кто может создавать новые объекты, и usage — кто может обращаться к объектам в той схеме. Поэтому может быть удобно для разработчиков сделать отдельную схему user_tmp и исключить её из бекапов, а в остальные схемы не давать прав create — тем самым форсируя, что таблицы приложения проходят через обычную принятую у вас процедуру миграций.

Для полноты картины: схемы public может и не быть, если она была удалена в базе, которая указанна в template опции create database

SQL-Ex blog

Создание схемы SQL для организации объектов базы данных, предоставления разрешений и упрощения обслуживания

Добавил Sergey Moiseenko on Суббота, 6 мая. 2023

При создании объектов или доступа к ним в SQL Server вы можете также указывать имя схемы объекта. Что такое схема, и как она используется в Microsoft SQL Server?

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

Что такое схема?

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

История схем

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

Встроенные схемы

  • dbo
    • Схема по умолчанию
    • Предполагается, если не указано имя схемы. В запросах используется [ИмяТаблицы] или [ИмяСхемы].[ИмяТаблицы]
    • Владельцем является пользователь Guest (гость). Отключено по умолчанию.
    • Если когда и используется, то редко.
    • Схема для представлений метаданных SQL Server
    • Информация об объекте
    • Информация о выполняющемся запросе
    • Динамические административные представления (DMV) в памяти

    Зачем использовать схемы?

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

    Что может послужить примером использования схем?

    • Комплектующие
    • Аренда
    • Продажи
    • Услуги

    Оператор создания схемы

    Вот полный синтаксис T-SQL CREATE SCHEMA:

    CREATE SCHEMA schema_name_clause [ [ . n ] ] 
    ::=
    <
    schema_name
    | AUTHORIZATION owner_name
    | schema_name AUTHORIZATION owner_name
    >
    ::=
    <
    table_definition | view_definition | grant_statement |
    revoke_statement | deny_statement
    >
    • Создать новую базу данных SQL
    • Создать пользователя с именем User1
    • Создать схемы для отделов комплектующих (Parts), аренды (Rentals), продаж (Sales) и услуг (Service)
    • Создать новую таблицу в каждой схеме
    • Создать простую хранимую процедуру, которая будет запрашивать все записи в соответствующей таблице
    • Предоставить разрешения на select и execute в схеме Parts пользователю User1
    -- создаем базу данных 
    CREATE DATABASE [SkiShop];
    GO
    -- используем новую базу данных
    USE [SkiShop];
    GO
    -- создаем пользователя базы данных
    CREATE USER [User1] FOR LOGIN [User1];
    GO
    -- создаем схемы
    CREATE SCHEMA [Parts];
    GO
    CREATE SCHEMA [Rentals];
    GO
    CREATE SCHEMA [Sales];
    GO
    CREATE SCHEMA [Service];
    GO
    -- создаем таблицы
    CREATE TABLE [Parts].[TableA]
    (
    ID int identity(1, 1) PRIMARY KEY, [Col1] varchar(50)
    );
    GO
    CREATE TABLE [Rentals].[TableA]
    (
    ID int identity(1, 1) PRIMARY KEY, [Col1] varchar(50)
    );
    GO
    CREATE TABLE [Sales].[TableA]
    (
    ID int identity(1, 1) PRIMARY KEY, [Col1] varchar(50)
    )
    CREATE TABLE [Service].[TableA]
    (
    ID int identity(1, 1) PRIMARY KEY, [Col1] varchar(50)
    );
    GO
    -- создаем процедуры
    CREATE PROCEDURE [Parts].[Proc1]
    AS
    SELECT * FROM [Parts].[TableA];
    GO
    CREATE PROCEDURE [Service].[Proc1]
    AS
    SELECT * FROM [Service].[TableA];
    GO
    CREATE PROCEDURE [Rentals].[Proc1]
    AS
    SELECT * FROM [Rentals].[TableA];
    GO
    CREATE PROCEDURE [Sales].[Proc1]
    AS
    SELECT * FROM [Sales].[TableA];
    GO
    -- предоставляем разрешения select и execute пользователю
    GRANT SELECT ON SCHEMA::[Parts] TO [User1];
    GRANT EXECUTE ON SCHEMA::[Parts] TO [User1];
    GO

    Затем мы подключимся как User1 и выполним хранимую процедуру [Parts].[Proc1] в базе данных SkiShop.

    USE [SkiShop]; 
    GO
    EXEC [Parts].[Proc1];

    Запрос выполняется и, конечно, не возвращает никаких записей, поскольку таблица пустая, но мы видим, что хранимая процедура выполнилась. Мы увидели, что пользователь USER1 имеет права на select и execute для таблицы Parts.TableA, которые мы предоставили схеме Parts.

    Теперь давайте посмотрим, что произойдет с другими схемами и таблицами при попытке выполнить другие три хранимых процедуры или выборки из таблиц в трех других схемах, в которых User1 не имеет разрешений.

    USE [SkiShop]; 
    GO
    EXEC [Rentals].[Proc1];
    EXEC [Sales].[Proc1];
    EXEC [Service].[Proc1];
    SELECT * FROM [Rentals].[TableA]
    SELECT * FROM [Sales].[TableA];
    SELECT * FROM [Service].[TableA];

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

    Msg 229, Level 14, State 5, Procedure Rentals.Proc1, Line 1 [Batch Start Line 2]
    The EXECUTE permission was denied on the object ‘Proc1’, database ‘SkiShop’, schema ‘Rentals’.

    Msg 229, Level 14, State 5, Procedure Sales.Proc1, Line 1 [Batch Start Line 2]
    The EXECUTE permission was denied on the object ‘Proc1’, database ‘SkiShop’, schema ‘Sales’.

    Msg 229, Level 14, State 5, Procedure Service.Proc1, Line 1 [Batch Start Line 2]
    The EXECUTE permission was denied on the object ‘Proc1’, database ‘SkiShop’, schema ‘Service’.

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

    Msg 229, Level 14, State 5, Line 8
    The SELECT permission was denied on the object ‘TableA’, database ‘SkiShop’, schema ‘Rentals’.

    Msg 229, Level 14, State 5, Line 9
    The SELECT permission was denied on the object ‘TableA’, database ‘SkiShop’, schema ‘Sales’.

    Msg 229, Level 14, State 5, Line 10
    The SELECT permission was denied on the object ‘TableA’, database ‘SkiShop’, schema ‘Service’.

    Ссылки по теме

    1. Методы авторизации SQL Server, логины и пользователи базы данных
    2. Безопасность SQL Server — модель безопасности с использованием определяемых пользователем ролей

    Схема базы данных

    Схема базы данных включает в себя описания содержания, структуры и ограничений целостности, используемые для создания и поддержки базы данных [1] .

    Постоянные данные в среде базы данных включают в себя схему и базу данных. Система управления данными использует определения данных в схеме для обеспечения доступа и управления доступом к данным в базе данных [1] .

    Схема как структура базы данных

    Схема базы данных MediaWiki

    Схема системы базы данных (от англ. Database schema) — её структура, описанная на формальном языке, поддерживаемом системой управления базами данных (СУБД). В реляционных базах данных схема определяет таблицы, поля в каждой таблице, а также отношения между полями и таблицами.

    Схемы в общем случае хранятся в словаре данных. Хотя схема определена на языке базы данных в виде текста, термин часто используется для обозначения графического представления структуры базы данных. [2]

    Основными объектами схемы являются таблицы и связи.

    Схема как объект базы данных

    Есть и другое понятие схемы в теории баз данных.

    Схема (SCHEMA) [3] — является одним из основных объектов базы данных Oracle. Близкое понятие (RIS Schema) существует в RIS-интерфейсе доступа к базам данных. SCHEMA также появилась и в Microsoft SQL Server 2005 и формально определяется как набор объектов в базе данных [4] .

    В Oracle она привязывается только к одному пользователю (USER) и является логическим набором объектов базы данных. Схема создается при создании пользователем первого объекта, и все последующие объекты созданные этим пользователем становятся частью этой схемы.

    Она может включать другие объекты, принадлежащие этому пользователю:

    • таблицы,
    • последовательности,
    • хранимые программы,
    • кластеры,
    • связи баз данных,
    • триггеры,
    • библиотеки внешних процедур,
    • индексы,
    • пакеты,
    • хранимые функции и процедуры,
    • синонимы,
    • представления,
    • снимки,
    • объектные таблицы,
    • объектные типы,
    • объектные представления.

    Существуют и подобъекты схемы, такие как:

    • столбцы: таблиц и представлений,
    • секции таблиц,
    • ограничения целостности,
    • триггеры,
    • пакетные процедуры и функции и другие элементы, хранимые в пакетах (курсоры, типы и т. п).

    Существуют объекты не зависимые от схемы

    • каталоги,
    • профили,
    • роли,
    • сегменты,
    • табличные области
    • пользователи.

    Уровни схемы базы данных

    • Концептуальная схема — карта концепций и их связей
    • Логическая схема — карта сущностей и их атрибутов и связей
    • Физическая схема — частичная реализация логической схемы
    • Схема объекта — объект БД Oracle

    Примечания

    1. 12 ГОСТ Р ИСО МЭК ТО 10032-2007: Эталонная модель управления данными (идентичен ISO/IEC TR 10032:2003 Information technology — Reference model of data management)
    2. What is schema? — A Word Definition From the Webopedia Computer Dictionary
    3. Основные объекты Oracle — Книги по базам данных
    4. Схемы баз данных SQL Server 2005, разделение пользователей и схем — AskIt.RU

    См. также

    • Моделирование данных
    • Моделирование данных
    • Базы данных
    • Теоретические основы баз данных

    Что такое схема в sql

    Кластер баз данных Postgres Pro содержит один или несколько именованных экземпляров баз. На уровне кластера создаются пользователи и группы, но данные могут относиться только к базам данных. При этом в рамках одного подключения к серверу можно обращаться к данным только одной базы данных, указанной при установлении соединения.

    Примечание

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

    База данных содержит одну или несколько именованных схем, которые в свою очередь содержат таблицы. Схемы также содержат именованные объекты других видов, включая типы данных, функции и операторы. Одно и то же имя объекта можно свободно использовать в разных схемах, например и schema1 , и myschema могут содержать таблицы с именем mytable . В отличие от баз данных, схемы не ограничивают доступ к данным: пользователь может обращаться к объектам в любой схеме текущей базы данных, если ему назначены соответствующие права.

    Есть несколько возможных объяснений, для чего стоит применять схемы:

    Чтобы одну базу данных могли использовать несколько пользователей, независимо друг от друга.

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

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

    5.8.1. Создание схемы

    Для создания схемы используется команда CREATE SCHEMA . При этом вы определяете имя схемы по своему выбору, например так:

    CREATE SCHEMA myschema;

    Чтобы создать объекты в схеме или обратиться к ним, указывайте полное имя, состоящее из имён схемы и объекта, разделённых точкой:

    схема.таблица 

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

    Есть ещё более общий синтаксис

    база_данных.схема.таблица 

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

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

    CREATE TABLE myschema.mytable ( . );

    Чтобы удалить пустую схему (не содержащую объектов), выполните:

    DROP SCHEMA myschema;

    Удалить схему со всеми содержащимися в ней объектами можно так:

    DROP SCHEMA myschema CASCADE;

    Стоящий за этим общий механизм описан в Разделе 5.13.

    Часто бывает нужно создать схему, владельцем которой будет другой пользователь (это один из способов ограничения пользователей пространствами имён). Сделать это можно так:

    CREATE SCHEMA имя_схемы AUTHORIZATION имя_пользователя;

    Вы даже можете опустить имя схемы, в этом случае именем схемы станет имя пользователя. Как это можно применять, описано в Подразделе 5.8.6.

    Схемы с именами, начинающимися с pg_ , являются системными; пользователям не разрешено использовать такие имена.

    5.8.2. Схема public

    До этого мы создавали таблицы, не указывая никакие имена схем. По умолчанию такие таблицы (и другие объекты) автоматически помещаются в схему « public » . Она содержится во всех создаваемых базах данных. Таким образом, команда:

    CREATE TABLE products ( . );
    CREATE TABLE public.products ( . );

    5.8.3. Путь поиска схемы

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

    Возможность создавать одноимённые объекты в разных схемах усложняет написание запросов, которые должны всегда обращаться к конкретным объектам. Это также потенциально позволяет пользователям влиять на поведение запросов других пользователей, злонамеренно или случайно. Ввиду преобладания неполных имён в запросах и их использования внутри PostgreSQL , добавить схему в search_path — по сути значит доверять всем пользователям, имеющим право CREATE в этой схеме. Когда вы выполняете обычный запрос, злонамеренный пользователь может создать объекты в схеме, включённой в ваш путь поиска, и таким образом перехватывать управление и выполнять произвольные функции SQL как если бы их выполняли вы.

    Первая схема в пути поиска называется текущей. Эта схема будет использоваться не только при поиске, но и при создании объектов — она будет включать таблицы, созданные командой CREATE TABLE без указания схемы.

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

    SHOW search_path;

    В конфигурации по умолчанию она возвращает:

    search_path -------------- "$user", public

    Первый элемент ссылается на схему с именем текущего пользователя. Если такой схемы не существует, ссылка на неё игнорируется. Второй элемент ссылается на схему public, которую мы уже видели.

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

    Чтобы добавить в путь нашу новую схему, мы выполняем:

    SET search_path TO myschema,public;

    (Мы опускаем компонент $user , так как здесь в нём нет необходимости.) Теперь мы можем обращаться к таблице без указания схемы:

    DROP TABLE mytable;

    И так как myschema — первый элемент в пути, новые объекты будут по умолчанию создаваться в этой схеме.

    Мы можем также написать:

    SET search_path TO myschema;

    Тогда мы больше не сможем обращаться к схеме public, не написав полное имя объекта. Единственное, что отличает схему public от других, это то, что она существует по умолчанию, хотя её так же можно удалить.

    В Разделе 9.25 вы узнаете, как ещё можно манипулировать путём поиска схем.

    Как и для имён таблиц, путь поиска аналогично работает для имён типов данных, имён функций и имён операторов. Имена типов данных и функций можно записать в полном виде так же, как и имена таблиц. Если же вам нужно использовать в выражении полное имя оператора, для этого есть специальный способ — вы должны написать:

    OPERATOR(схема.оператор) 

    Такая запись необходима для избежания синтаксической неоднозначности. Пример такого выражения:

    SELECT 3 OPERATOR(pg_catalog.+) 4;

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

    5.8.4. Схемы и права

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

    Пользователю также можно разрешить создавать объекты в схеме, не принадлежащей ему. Для этого ему нужно дать право CREATE в требуемой схеме. Заметьте, что по умолчанию все имеют права CREATE и USAGE в схеме public . Благодаря этому все пользователи могут подключаться к заданной базе данных и создавать объекты в её схеме public . Некоторые шаблоны использования требуют запретить это:

    REVOKE CREATE ON SCHEMA public FROM PUBLIC;

    (Первое слово « public » обозначает схему, а второе означает « каждый пользователь » . В первом случае это идентификатор, а во втором — ключевое слово, поэтому они написаны в разном регистре; вспомните указания из Подраздела 4.1.1.)

    5.8.5. Схема системного каталога

    В дополнение к схеме public и схемам, создаваемым пользователями, любая база данных содержит схему pg_catalog , в которой находятся системные таблицы и все встроенные типы данных, функции и операторы. pg_catalog фактически всегда является частью пути поиска. Если даже эта схема не добавлена в путь явно, она неявно просматривается до всех схем, указанных в пути. Так обеспечивается доступность встроенных имён при любых условиях. Однако вы можете явным образом поместить pg_catalog в конец пути поиска, если вам нужно, чтобы пользовательские имена переопределяли встроенные.

    Так как имена системных таблиц начинаются с pg_ , такие имена лучше не использовать во избежание конфликта имён, возможного при появлении в будущем системной таблицы с тем же именем, что и ваша. (С путём поиска по умолчанию неполная ссылка будет воспринята как обращение к системной таблице.) Системные таблицы будут и дальше содержать в имени приставку pg_ , так что они не будут конфликтовать с неполными именами пользовательских таблиц, если пользователи со своей стороны не будут использовать приставку pg_ .

    5.8.6. Шаблоны использования

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

    Ограничить обычных пользователей личными схемами. Для реализации этого подхода выполните REVOKE CREATE ON SCHEMA public FROM PUBLIC и создайте для каждого пользователя схему с его именем. Если затрагиваемые пользователи подключались к базе ранее, проведите аудит схемы на предмет наличия таких же имён, как в схеме pg_catalog . Вспомните, что путь поиска по умолчанию начинается со значения $user , которое разрешается в имя пользователя. Таким образом, если у всех пользователей будет отдельная схема, они по умолчанию будут обращаться к собственным схемам.

    Удалить схему public из пути поиска по умолчанию для каждого пользователя с помощью команды ALTER ROLE пользователь SET search_path = «$user» . Все сохранят возможность создавать объекты в общедоступной схеме, но обращаться к ним будут только по полным именам. Хотя обращение к таблицам по полным именам вполне безопасно, вызовы функций в схеме public будут небезопасными или ненадёжными. Кроме того, пользователь, имеющий право CREATEROLE , может отменить это назначение и выполнять произвольные запросы от имени пользователей, полагающихся на этот путь. Если вы создаёте функции или расширения в схеме public или даёте пользователям право CREATEROLE , но не хотите, чтобы они стали практически суперпользователями, вам нужно использовать первый шаблон.

    Удалить схему public из пути поиска search_path в postgresql.conf . Это будет иметь такое же влияние на пользователей, что и предыдущий шаблон. В дополнение к его особенностям относительно функций и права CREATEROLE , данный шаблон подразумевает также доверие к владельцам базам данных, как к имеющим право CREATEROLE . Если вы создаёте функции или расширения в схеме public, даёте пользователям права CREATEROLE , CREATEDB или делаете их владельцами отдельных баз данных, но не хотите, чтобы они стали практически суперпользователями, вам нужно использовать первый шаблон.

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

    5.8.7. Переносимость

    Стандарт SQL не поддерживает обращение в одной схеме к разным объектам, принадлежащим разным пользователям. Более того, в ряде реализаций СУБД нельзя создавать схемы с именем, отличным от имени владельца. На практике, в СУБД, реализующих только базовую поддержку схем согласно стандарту, концепции пользователя и схемы очень близки. Таким образом, многие пользователи полагают, что полное имя на самом деле образуется как имя_пользователя . имя_таблицы . И именно так будет вести себя Postgres Pro , если вы создадите схемы для каждого пользователя.

    В стандарте SQL нет и понятия схемы public . Для максимального соответствия стандарту использовать схему public не следует.

    Конечно, есть СУБД, в которых вообще не реализованы схемы или пространства имён поддерживают (возможно, с ограничениями) обращения к другим базам данных. Если вам потребуется работать с этими системами, максимальной переносимости вы достигнете, вообще не используя схемы.

    Пред. Наверх След.
    5.7. Политики защиты строк Начало 5.9. Наследование

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

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