Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо:SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
Видимость метаданных ограничивается защищаемыми объектами, которыми пользователь владеет или на которые пользователю предоставлено разрешение.
Например, следующий запрос возвращает строку, если пользователь предоставляет разрешение, например SELECT или INSERT в таблице myTable
.
SELECT name, object_id
FROM sys.tables
WHERE name = N'myTable';
GO
Однако если у пользователя нет разрешений myTable
, запрос возвращает пустой результирующий набор.
Область и влияние конфигурации видимости метаданных
Конфигурация видимости метаданных применяется только к следующим защищаемым компонентам:
- Представления каталога
- Метаданные, предоставляющие встроенные функции
- представлений совместимости;
- Хранимые процедуры ядра СУБД
sp_help
- Представления информационной схемы
- Расширенные свойства
Конфигурация видимости метаданных не применяется к следующим защищаемым компонентам:
- Системные таблицы доставки журналов
- Системные таблицы плана обслуживания базы данных
- Системные таблицы репликации
- системные таблицы агент SQL Server
- Системные таблицы резервных копий
- Хранимые процедуры репликации и агента
sp_help
SQL Server
Ограниченная возможность доступа к метаданным означает следующее.
- Запросы на системные представления смогут вернуть только подмножество строк или иногда пустой результирующий набор.
- Встроенные функции, такие как OBJECTPROPERTYEX, могут возвращать
NULL
метаданные. - Хранимые процедуры ядро СУБД
sp_help
могут возвращать только подмножество строк илиNULL
. - В результате приложения, предполагающие доступ к общедоступным метаданным, прервутся.
SQL модули, например хранимые процедуры и триггеры, выполняются в контексте безопасности участника и поэтому имеют ограниченный доступ к метаданным. Например, в следующем коде, когда хранимая процедура пытается получить доступ к метаданным для таблицы myTable
, на который участник не имеет прав, возвращается пустой результирующий набор. В предыдущих выпусках SQL Server возвращается строка.
CREATE PROCEDURE assumes_caller_can_access_metadata
BEGIN
SELECT name, object_id
FROM sys.objects
WHERE name = N'myTable';
END;
GO
Чтобы разрешить вызывающим пользователям просматривать метаданные, можно предоставить вызывающим лицам разрешение VIEW DEFINITION, а начиная с SQL Server 2022 — либо разрешение VIEW SECURITY DEFINITION, либо VIEW PERFORMANCE DEFINITION для соответствующего уровня: уровня объекта, базы данных или сервера. Таким образом, если в предыдущем примере участник имеет разрешение VIEW DEFINITION на таблицу myTable
, хранимая процедура возвращает строку. Дополнительные сведения см. в разделе GRANT (Transact-SQL) и GRANT Database Permissions (Transact-SQL).
Также можно изменить хранимую процедуру таким образом, что она будет выполняться под учетными данными владельца. Если владелец процедуры и владелец таблицы один и тот же, применяются цепочки владения, и контекст безопасности владельца процедуры открывает доступ к метаданным таблицы myTable
. Под таким сценарием следующий код возвращает строку метаданных участнику.
Примечание.
В следующем примере использования представление каталога sys.objects применяется вместо представления совместимости sys.sysobjects .
CREATE PROCEDURE does_not_assume_caller_can_access_metadata
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT name, object_id
FROM sys.objects
WHERE name = N'myTable'
END;
GO
Примечание.
Можно использовать EXECUTE AS, чтобы временно переключиться на контекст безопасности участника. Дополнительные сведения см. в разделе EXECUTE AS (Transact-SQL).
Преимущества и ограничения конфигурации видимости метаданных
Настройка видимости метаданных может играть очень важную роль в общем плане безопасности. Однако иногда даже опытный пользователь может форсировать раскрытие некоторых метаданных. Рекомендуется развертывание разрешений метаданных как одной из многих глубоко эшелонированных защит.
Теоретически можно принудительно применить выброс метаданных в сообщениях об ошибках, управляя порядком оценки предиката в запросах. Возможность таких атак пробной и ошибок не зависит от SQL Server. Это подразумевается ассоциативными и коммутативными преобразованиями, разрешенными в реляционной алгебре. Можно снизить эту угрозу ограничением объема сведений, возвращаемых в сообщениях об ошибках. Также, чтобы ограничить видимость метаданных таким образом, можно запустить сервер с флагом трассировки 3625. Этот флаг трассировки ограничивает объем сведений, отображаемых в сообщениях об ошибках. В свою очередь, это помогает предотвратить форсированное раскрытие. Компромисс заключается в том, что сообщения об ошибках будут в сжатом виде и могут вызвать сложности при использовании для отладки. Дополнительные сведения см. в разделе ядро СУБД Параметры запуска службы и флаги трассировки (Transact-SQL).
Следующие метаданные не подлежат принудительному раскрытию.
Значение, хранящееся в столбце
provider_string
sys.servers
. Пользователь, у которых нет разрешения ALTER ANY LINKED SERVER , увидитNULL
значение в этом столбце.Определение источника пользовательского объекта, например хранимой процедуры или триггера. Код источника видим только в том случае, когда выполняется одно из следующих условий.
Пользователь имеет для объекта разрешение VIEW DEFINITION.
Пользователю не было запрещено разрешение VIEW DEFINITION для объекта и имеет разрешение CONTROL, ALTER или TAKE OWNERSHIP для объекта. Все прочие пользователи получат значение
NULL
.
Столбцы определений, найденные в следующих представлениях каталога:
sys.all_sql_modules
sys.server_sql_modules
sys.default_constraints
sys.numbered_procedures
sys.sql_modules
sys.check_constraints
sys.computed_columns
Столбец
ctext
вsyscomments
представлении совместимости.Выходные данные
sp_helptext
процедуры.Следующие столбцы в представлениях информационной схемы:
INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE
INFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULT
INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION
INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT
INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT
INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
Функция OBJECT_DEFINITION().
Значение, хранящееся в столбце
sys.sql_logins
password_hash. Пользователь, у которых нет CONTROL SERVER или начиная с SQL Server 2022, разрешение VIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION увидитNULL
значение в этом столбце.
Примечание.
Определения SQL встроенных системных процедур и функций отображаются sys.system_sql_modules
в представлении каталога, sp_helptext
хранимой процедуре и функции OBJECT_DEFINITION().
Примечание.
Системная хранимая процедура sp_helptext
не поддерживается в Azure Synapse Analytics. Вместо нее используйте представление каталога объектов sys.sql_modules
.
Общие принципы видимости метаданных
Ниже представлены некоторые общие принципы, относящиеся к видимости метаданных.
Неявные разрешения предопределенных ролей.
Область разрешений.
Приоритет инструкции DENY
Видимость метаданных вспомогательных компонентов.
Фиксированные роли и неявные разрешения
Доступ предопределенных ролей к метаданным зависит от соответствующих неявных разрешений.
Область разрешений.
Разрешения на одну область дают возможность видеть метаданные в этой области и на всех включенных областях. Например, разрешение SELECT для схемы предполагает, что его получатель имеет разрешение SELECT для всех защищаемых объектов, содержащихся в этой схеме. Таким образом, когда пользователю предоставлено для схемы разрешение SELECT, он может просматривать ее метаданные, а также все находящиеся в ней таблицы, представления, функции, процедуры, очереди, синонимы, типы и коллекции схем XML. Дополнительные сведения о областях см. в разделе "Иерархия разрешений" (ядро СУБД).
Примечание.
Разрешение UNMASK не влияет на видимость метаданных: предоставление UNMASK только не будет раскрывать метаданные. Разрешение UNMASK будет действовать только совместно с разрешением SELECT. Пример. Если предоставить разрешение UNMASK в области базы данных и разрешение SELECT для отдельной таблицы, то в результате пользователь сможет просматривать только метаданные конкретной таблицы, в которой ему разрешено выполнять SELECT, а метаданные других таблиц доступны не будут.
Приоритет инструкции DENY
DENY обычно имеет приоритет по отношению к другим разрешениям. Например, если пользователю базы данных предоставлено разрешение EXECUTE на схему, но разрешение EXECUTE для хранимой процедуры в этой схеме запрещено, пользователь не может просмотреть метаданные для этой хранимой процедуры.
Кроме того, если пользователю запрещено разрешение EXECUTE на схему, но было предоставлено разрешение EXECUTE для хранимой процедуры в этой схеме, пользователь не может просмотреть метаданные для этой хранимой процедуры.
Например, если пользователю было предоставлено и запрещено разрешение EXECUTE на хранимую процедуру, которая возможна с помощью различных членств в роли, DENY имеет приоритет, и пользователь не может просматривать метаданные хранимой процедуры.
Видимость метаданных вспомогательных компонентов.
Видимость вложенных компонентов, таких как индексы, ограничения проверки и триггеры, определяются разрешениями родительского элемента. Эти вложенные компоненты не имеют предоставленных разрешений. Например, если пользователю предоставлено какое-то разрешение на таблицу, он может просмотреть метаданные для столбцов таблицы, индексов, проверочных ограничений, триггеров и других подобных вспомогательных компонентов. Еще один пример — предоставление разрешения SELECT только для отдельного столбца заданной таблицы. Это позволит получателю просматривать метаданные всей таблицы, в том числе всех столбцов. Один из способов подумать об этом заключается в том, что разрешение VIEW DEFINITION работает только на уровне сущности (таблица в данном случае) и недоступно для списков подтенности (например, столбцов или выражений безопасности).
Следующий код демонстрирует такое поведение:
CREATE TABLE t1
(
c1 int,
c2 varchar
);
GO
CREATE USER testUser WITHOUT LOGIN;
GO
EXECUTE AS USER='testUser';
SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), name FROM sys.columns;
SELECT * FROM sys.tables
-- this returns no data, as the user has no permissions
REVERT;
GO
-- granting SELECT on only 1 column of the table:
GRANT SELECT ON t1(c1) TO testUser;
GO
EXECUTE AS USER='testUser';
SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), name FROM sys.columns;
SELECT * FROM sys.tables
-- this returns metadata for all columns of the table and the table itself
REVERT;
GO
DROP TABLE t1
DROP USER testUser
Метаданные, доступные всем пользователям базы данных
Некоторые метаданные должны быть доступны для всех пользователей в указанной базе данных. Например, у файловых групп нет разрешения; Таким образом, пользователю не удается предоставить разрешение на просмотр метаданных файловой группы. Однако любой пользователь, который может создать таблицу, должен иметь доступ к метаданным файловой группы, чтобы использовать предложения ON filegroup или TEXTIMAGE_ON filegroup инструкции CREATE TABLE.
Метаданные, возвращаемые функциями DB_ID() и DB_NAME(), видимы всем пользователям.
Это список представлений каталога, видимых для общей роли.
sys.partition_functions
sys.partition_schemes
sys.filegroups
sys.database_files
sys.partitions
sys.schemas
sys.sql_dependencies
sys.parameter_type_usages
sys.partition_range_values
sys.data_spaces
sys.destination_data_spaces
sys.allocation_units
sys.messages
sys.configurations
sys.type_assembly_usages
sys.column_type_usages