Sql sa: Как сбросить пароль SA в Microsoft SQL Server?
Содержание
sql server — MS SQL 2008 / в названии таблицы
пытаюсь получить данные из таблицы, таблица существует(проверено не один раз), название совпадает (проверено не один раз), как я понял (насколько моего уровня знаний хватает) проблема в самом названии таблицы.
import pandas as pd from sqlalchemy import create_engine, text # variables serverName = "DBTEST" engine = create_engine('mssql+pyodbc://user:[email protected]/TEST?driver=SQL+Server') conn = engine.connect() queryDiscr = text(f'SELECT * FROM "{serverName}$Sales/purch" ') DiscrDF = pd.read_sql_query(queryDiscr, conn)
пробовал экранировать по разному:
queryDiscr = text(f'SELECT * FROM [{serverName}$Sales/purch] ') queryDiscr = text(f'SELECT * FROM {serverName}[$Sales/purch] ') queryDiscr = text(f'SELECT * FROM "{serverName}$Sales/purch" ') queryDiscr = text(f'SELECT * FROM \"{serverName}$Sales/purch\" ')
одна и та же ошибка Invalid object name 'DBTEST$Sales/purch'
помогите пожалуйста с запросом.
- sql
- sql-server
- pandas
5
Пожалуйста, попробуйте следующее в SSMS.
Это покажет имена таблиц и остальные детали.
USE DBTEST; GO SELECT * FROM INFORMATION_SCHEMA.TABLES;
Например, для базы данных AdventureWorks2019:
TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
---|---|---|---|
AdventureWorks2019 | Sales | SalesTaxRate | BASE TABLE |
AdventureWorks2019 | Sales | PersonCreditCard | BASE TABLE |
AdventureWorks2019 | dbo | T | BASE TABLE |
AdventureWorks2019 | Person | vAdditionalContactInfo | VIEW |
AdventureWorks2019 | Person | PersonPhone | BASE TABLE |
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Введение в безопасность SQL Server. Часть 4
Учетная запись sa является самой мощной учетной записью в экземпляре SQL Server, и большинство администраторов баз данных отключают ее. Есть несколько других встроенных учетных записей, о которых вы, возможно, не так часто думаете. Роберт Шелдон продолжает серию статей о безопасности SQL Server статьей о встроенных учетных записях.
Серии на данный момент:
- Введение в безопасность SQL Server — часть 1
- Введение в безопасность SQL Server — часть 2
- Введение в безопасность SQL Server — часть 3
- Введение в безопасность SQL Server — часть 4
- Введение в безопасность SQL Server — часть 5
- Введение в безопасность SQL Server — часть 6
В предыдущих статьях этой серии я познакомил вас с принципами безопасности SQL Server и той ролью, которую они играют в аутентификации и авторизации. По своей сути принципалы — это объекты сервера и базы данных, которые могут запрашивать доступ к ресурсам SQL Server. Наиболее распространенными субъектами являются имена входа на сервер, роли сервера, пользователи базы данных и роли базы данных.
SQL Server предоставляет ряд встроенных участников, которые автоматически добавляются при установке экземпляра SQL Server или создании базы данных. В некоторых случаях не всегда ясно, когда и как использовать эти принципы. Например, SQL Server автоматически добавляет общедоступных ролей сервера и базы данных
. В отличие от других фиксированных ролей, вы можете изменить их разрешения. Однако это может повлиять на общие операции с базой данных, поэтому при изменении конфигурации по умолчанию следует соблюдать осторожность.
В этой статье я расскажу о некоторых наиболее запутанных встроенных принципалах, чтобы помочь вам лучше понять, как они вписываются в общую картину аутентификации. Я создал примеры для этой статьи на экземпляре SQL Server 2017, но большая часть информации относится к выпускам SQL Server, начиная с 2014 года или ранее. Независимо от того, какой выпуск вы используете, вы должны понимать, как работают эти встроенные принципы, прежде чем включать их или изменять в своих производственных средах.
Логин sa
Логин sa
, сокращение от системного администратора , — один из самых рискованных участников уровня сервера в SQL Server. Он автоматически добавляется в качестве члена фиксированной серверной роли sysadmin
и поэтому имеет все разрешения для этого экземпляра и может выполнять любые действия. Если логин был взломан, злоумышленник может нанести неограниченный ущерб.
Вы не можете сбросить логин sa
, но можете отключить его. Если вы выбираете проверку подлинности Windows при установке SQL Server, ядро базы данных назначает учетной записи случайный пароль и автоматически отключает его. Если вы затем переключитесь на аутентификацию SQL Server, вход в систему останется отключенным, и вам придется включить его вручную.
Если вы выберете Аутентификацию SQL Server во время установки, учетная запись будет включена, но вы должны указать пароль, поэтому убедитесь, что он надежный. Даже если вход включен, вам следует избегать его использования для ваших приложений. На самом деле, если для подключающейся системы абсолютно не требуется логин sa
, лучше оставить учетную запись отключенной.
Вы можете проверить, отключен ли вход sa
, запросив системное представление sys.server_principals
, используя SELECT
оператор, подобный следующему:
мастер ЕГЭ; GO ВЫБЕРИТЕ Principal_id, type_desc, is_disabled FROM sys.server_principals ГДЕ name = ‘sa’; |
Если вход в систему отключен, значение is_disabled
будет 1
, как показано на рисунке 1.
Рисунок 1. Имя входа sa в экземпляре SQL Server
Вы не можете удалить логин sa
из роли сервера sysadmin
, но можете проверить его членство:
1 2 3 4 5 6 7 | SELECT member. name FROM sys.server_role_members rm JOIN sys.server_principals role ON rm.role_principal_id = role.principal_id 90 002 ПРИСОЕДИНЯЙТЕСЬ к члену sys.server_principals ON rm.member_principal_id = member.principal_id ГДЕ role.name = ‘sysadmin’; |
Оператор использует системное представление sys.server_role
и системное представление sys.server_principals
для возврата членов роли sysadmin
, как показано на рисунке 2.
9 0002 Рисунок 2. Принципалы, назначенные роль сервера sysadmin
Если вы окажетесь в ситуации, требующей sa
, вы должны активировать учетную запись, прежде чем ее можно будет использовать. Для этого запустите оператор ALTER
LOGIN
, который устанавливает свойство ENABLE
, а затем снова запустите оператор, чтобы назначить пароль для входа в систему, как показано в следующем примере:
1 2 3 4 5 6 | мастер ЕГЭ; GO ALTER LOGIN sa ENABLE; GO ИЗМЕНИТЬ ВХОД sa С ПАРОЛЕМ = ‘tempPW@56789’; ГО |
Конечно, если бы вы разрешили вход в систему, вам нужно было бы назначить гораздо более надежный пароль, чем тот, который показан здесь. Более того, если вы просто пробуете все это, обязательно выполняйте свои модификации в непроизводственной среде.
Вы можете проверить вход sa
в SQL Server Management Studio (SSMS), запустив новый запрос и изменив соединение. Следующие шаги описывают, как изменить это соединение:
- В SSMS запустите новый запрос.
- На новой вкладке запроса щелкните правой кнопкой мыши пустую область в редакторе запросов, выберите Connection и щелкните Change Connection .
- В диалоговом окне Connect to Database Engine выберите SQL Server Connection из раскрывающегося списка Authentication . Форма будет обновлена и будет содержать текстовые поля для входа и пароля.
- Введите
sa
в качестве логина и пароля, которые вы указали при включении входа, а затем нажмите 9.0035 Подключить .
После того, как вы вошли в систему как sa
, попробуйте выполнить следующий запрос:
ВЫБЕРИТЕ * ОТ sys. server_principals; |
Запрос должен выполняться без проблем, поскольку логину sa
разрешено делать что-либо на сервере. В моей тестовой системе оператор SELECT
возвращает 32 строки.
После подтверждения входа выполните следующие ALTER
LOGIN
оператор для его отключения:
ALTER LOGIN sa DISABLE; ГО |
Затем запустите новый запрос и снова попробуйте подключиться с логином sa
, выполнив те же действия, что и выше. На этот раз вы должны получить сообщение об ошибке, аналогичное показанному на рисунке 3.
Рисунок 3. Ошибка при попытке подключения с отключенным логином sa
По возможности следует убедиться, что вход sa
отключен. Кроме того, рассмотрите возможность переименования логина, чтобы обеспечить еще одну линию защиты. Поскольку логин настолько хорошо известен, он часто становится целью киберпреступников, которые имеют в своем распоряжении множество инструментов для взлома паролей. Как только они попадут в ваши базы данных, вы не сможете остановить их, пока не станет слишком поздно.
Логины на основе сертификатов
Изучая SQL Server, вы, вероятно, заметите набор логинов на сервере, имена которых начинаются и заканчиваются двойными решетками, как в ##MS_PolicySigningCertificate##
. Логины — это учетные записи с сопоставлением сертификатов, используемые ядром базы данных для внутренних целей. Вы не должны удалять их или связываться с ними каким-либо образом.
Чтобы получить список входов на основе сертификатов, выполните следующий запрос:
SELECT name, type_desc, is_disabled FROM sys.server_principals WHERE name LIKE ‘##%’ ORDER BY name; |
На рис. 4 показаны результаты, возвращаемые оператором в моей системе.
Рисунок 4. Входы на основе сертификатов в экземпляр SQL Server
Обратите внимание, что два входа помечены как отключенные и их тип указан как SQL_LOGIN
, а не CERTIFICATE_MAPPED_LOGIN
. Несмотря на эти различия, в документации Microsoft конкретно указано, что эти два входа также считаются входами с сопоставлением сертификатов.
Вы можете просмотреть сертификаты, связанные с включенными входами на основе сертификатов, выполнив следующие SELECT
оператор:
SELECT name FROM sys.certificates WHERE name LIKE ‘##%’ ORDER BY name; |
В моей системе оператор возвращает результаты, показанные на рис. 5, подтверждая наличие сертификата для каждого включенного входа в систему.
Рис. 5. Сертификаты, связанные с входами в систему с сопоставлением сертификатов Возможно, вам придется объяснить властям, почему эти логины отображаются в ваших отчетах.
Общедоступные роли сервера и базы данных
Каждый экземпляр SQL Server содержит фиксированную роль сервера public
, а каждая база данных (включая системные базы данных) содержит фиксированную роль базы данных public
. Все логины принадлежат роли сервера public
, а все пользователи базы данных принадлежат роли базы данных public
. Вы не можете удалить ни одну из ролей, и вы не можете добавлять или удалять участников из какой-либо роли.
Механизм базы данных по умолчанию назначает набор разрешений ролям. Логины наследуют все разрешения, предоставленные общедоступная
роль сервера, если вход в систему не был специально предоставлен или запрещен в этих разрешениях. То же самое касается роли базы данных public
. Пользователи наследуют все разрешения, если им специально не были предоставлены или запрещены разрешения.
Чтобы просмотреть разрешения, назначенные роли общедоступного сервера
, выполните следующую инструкцию SELECT
:
1 2 3 4 5 6 7 8 9 10 11 | SELECT pm. state_desc, pm.permission_name, pm.class_desc, pm.major_id, ep.name ОТ sys.server_permissions pm ПРИСОЕДИНЯЙТЕСЬ к sys.server_principals pr ON pm.grantee_principal_id = pr.principal_id LEFT JOIN sys.endpoints ep ON pm.major_id = ep.endpoint_id ГДЕ pr.name = ‘public’; |
Оператор объединяет системные представления sys.server_permissions
, sys.server_principals
и sys.endpoints
для получения соответствующей информации. В моей системе я сохранил разрешения по умолчанию, которые показаны на рисунке 6.
Рисунок 6. Разрешения по умолчанию, назначенные роли общего сервера0025 общедоступная роль базы данных:
1 2 3 4 5 6 7 8 9 9 0003 10 11 | USE ImportSales1; GO SELECT pm. state_desc, pm.permission_name, pm.class_desc, pm.major_id, OBJECT_ ИМЯ(pm.major_id) obj_name ОТ sys.database_permissions pm ПРИСОЕДИНЯЙТЕСЬ к sys.database_principals pr ON pm.grantee_principal_id = pr.principal_id ГДЕ pr.name = ‘public’; |
В этом случае роль общедоступной базы данных
относится к базе данных ImportSales1
, которая была создана как часть примеров из предыдущей статьи этой серии. База данных представляет собой простую автономную базу данных, которая включает только схему Sales
и таблицу Customers
. Вы можете вернуться к этой статье для получения подробной информации о базе данных или запустить этот оператор для другой базы данных.
На рис. 7 показана часть результатов, возвращаемых оператором SELECT
в моей системе. Как и в случае с общедоступной серверной ролью
, я не вносил изменений в роль общедоступной базы данных
. По умолчанию роли предоставлено 176 разрешений, большинство из которых — это разрешение SELECT
, предоставленное системным представлениям.
Рисунок 7. Частичное представление разрешений по умолчанию, назначенных роли общедоступной базы данных
Если бы вы выполнили тот же запрос для master
, он вернет гораздо больший набор результатов (2254 строки в моей системе). В этом случае результаты также будут включать разрешение EXECUTE
, предоставленное системным функциям и хранимым процедурам.
Один из способов проверить действующие разрешения без самостоятельного написания сценариев — использовать SQL Census от Redgate. Он создает отчет о том, кто и к чему имеет доступ на ваших SQL-серверах, и дает рекомендации по передовому опыту, такие как отключение учетных записей sa. Он все еще находится в разработке, но это хорошая отправная точка для проверки ваших разрешений SQL Server и выполнения любых необходимых задач по очистке.
Общедоступные роли
отличаются от других фиксированных ролей сервера и базы данных тем, что вы можете предоставлять, отказывать и отзывать разрешения. Тем не менее, вам следует избегать изменения общедоступных ролей
и вместо этого создавать одну или несколько дополнительных ролей. Однако, если вы работаете где-то, где настаивают на использовании общедоступных ролей
, вам следует предоставлять разрешения ролям только на защищаемые объекты, которые вы хотите сделать доступными для всех пользователей. Кроме того, вам следует избегать отказа в разрешениях, поскольку они могут переопределить разрешения, предоставленные отдельным пользователям или входам.
Вы также можете отозвать разрешения для общедоступных
ролей, но будьте осторожны при этом. SQL Server по умолчанию назначает ряд разрешений этим ролям (как вы видели в предыдущих примерах), и многие из этих разрешений используются для рутинных операций с базой данных. Отзыв разрешений для этих ролей может повлиять на все логины или пользователей.
Пользователь базы данных dbo и схема
Каждая база данных содержит пользователя dbo
и схему dbo
. Несмотря на то, что они связаны, они служат совершенно разным целям. (срок dbo означает владельца базы данных .)
Пользователь dbo
добавляется в качестве члена фиксированной роли базы данных db_owner
. По умолчанию пользователю предоставляются все разрешения в базе данных, и он может выполнять все действия в рамках этой базы данных. Вы не можете ограничить пользователя dbo
или удалить пользователя из базы данных.
SQL Server автоматически сопоставляет имя пользователя sa
, владельца базы данных и членов системного администратора
для учетной записи пользователя dbo
в каждой базе данных. Чтобы убедиться в этом, подключитесь к экземпляру SQL Server как один из этих пользователей и запросите системную функцию CURRENT_USER
, как в следующем примере:
. | ВЫБЕРИТЕ ТЕКУЩЕГО_ПОЛЬЗОВАТЕЛЯ; |
Оператор SELECT
должен возвращать dbo
в качестве текущего пользователя.
Пользователь dbo
также владеет dbo
схема, которая является схемой по умолчанию для всех вновь создаваемых баз данных и пользователей, если не указана другая схема. Как и в случае с пользователем dbo
, вы не можете удалить схему dbo
.
Чтобы проверить имя пользователя и базу данных по умолчанию, связанные с пользователем dbo
, выполните следующий запрос к одной из ваших баз данных:
USE ImportSales1; GO ВЫБРАТЬ SUSER_SNAME(sid) login_name, default_schema_name ОТ sys.database_principals ГДЕ имя = ‘dbo’; |
В этом случае запрос относится к базе данных ImportSales1
, созданной для предыдущей статьи, но вы можете использовать любую базу данных. Он должен вернуть логин для вашего текущего соединения, а также схему dbo
.
Вы также можете убедиться, что пользователь dbo
был добавлен в роль базы данных db_owner
:
1 2 3 4 5 6 7 | SELECT member.name FROM sys.database_role_members rm JOIN sys.database_principals role ON rm.role_principal_id = role.principal_id 90 002 ПРИСОЕДИНЯЙТЕСЬ к члену sys.database_principals ON rm.member_principal_id = member.principal_id ГДЕ role.name = ‘db_owner’; |
Оператор должен вернуть dbo
вместе с любыми другими членами роли. Когда я запускал запрос в своей системе, я все еще работал в контексте базы данных ImportSales1
, поэтому запрос вернул только dbo
, который привязан к моему логину.
Однако посмотрите, что происходит с базой данных WideWorldImporters
, которую я прикрепил к своему экземпляру SQL Server из файла резервной копии, загруженного с GitHub:
ИСПОЛЬЗОВАНИЕ WideWorldImporters; GO SELECT SUSER_SNAME(sid) login_name, default_schema_name FROM sys. database_principals ГДЕ name = ‘dbo’; |
В моей системе результаты показывают, что sa
является связанным логином, наряду с dbo
в качестве схемы по умолчанию, как показано на рисунке 8.
Рисунок 8. Логин, связанный с пользователем dbo
900 02 Кроме того, когда я получаю членов db_owner
роль базы данных, результаты включают как пользователя dbo
, так и мою учетную запись:
1 2 3 4 5 6 7 | SELECT member.name FROM sys.database_role_members rm JOIN sys.database_principals role ON rm.role_principal_id = role.principal_id 90 002 ПРИСОЕДИНЯЙТЕСЬ к члену sys.database_principals ON rm.member_principal_id = member.principal_id ГДЕ role.name = ‘db_owner’; |
Поскольку пользователь dbo
связан с учетной записью sa
, мой логин добавляется как отдельный член к роли базы данных db_owner
. Таким образом, и мой логин, и логин sa
имеют полный контроль над базой данных (при условии, что логин sa
включен).
Имейте в виду, однако, что вы можете не увидеть те же результаты в своей системе, что и я. Возможно только dbo
пользователь будет добавлен к роли. Это будет зависеть от того, как вы настроили свою систему и добавили базу данных WideWorldImporters
.
В моей системе мой логин считается владельцем базы данных ImportSales1
и WideWorldImporters
, хотя мой логин связан только с пользователем dbo
в базе данных ImportSales1
. Чтобы подтвердить владельцев базы данных, я выполнил следующий запрос:
ВЫБЕРИТЕ имя, SUSER_SNAME(owner_sid) FROM sys.databases ГДЕ name = ‘ImportSales1’ ИЛИ name = ‘WideWorldImporters’; |
Запрос вернул мой логин для обеих баз данных, как показано на рисунке 9.
Рисунок 9. Логин, связанный с базами данных WideWorldImporters и ImportSales1Схема 0025 dbo . Когда вы запрашиваете объект базы данных без указания схемы, механизм запросов сначала ищет вашу схему по умолчанию, если она отличается от dbo
. Если объекта там нет, механизм запросов ищет схему dbo
. Если объект отсутствует в этой схеме, возвращается ошибка.
При создании пользователя можно указать схему по умолчанию. В противном случае предполагается схема dbo
. Пользователи с dbo
в качестве схемы по умолчанию не наследуют разрешения, предоставленные дбо
пользователь.
Кроме того, если указать схему по умолчанию, отличную от dbo
, и пользователь является членом роли сервера sysadmin
, указанная схема игнорируется и используется схема dbo
. Схема по умолчанию для всех членов sysadmin
— dbo
.
Пользователь гостевой базы данных и схема
Как и в случае с dbo
, каждая база данных содержит пользователя guest
и схему guest
. Вы можете использовать гость
пользователь для предоставления доступа к базе данных логинам, которые не связаны с учетными записями пользователей в этой базе данных, стратегия, которую не следует реализовывать легкомысленно.
Хотя пользователь guest
не может быть удален, он отключен по умолчанию и ему не назначены разрешения. Microsoft рекомендует оставить все как есть. Если включено, логины, которые не должны иметь доступа к базе данных, будут иметь доступ. Не активируйте учетную запись, если у вас нет для этого веских причин.
Пользователь guest
владеет схемой guest
. Как и пользователь, схему нельзя удалить. Однако он не содержит объектов и не имеет разрешений. На самом деле схема guest
используется редко, если вообще используется.
Чтобы проверить, включен ли пользователь guest
, выполните следующий запрос:
1 2 3 4 5 6 7 | USE ImportSales1; GO ВЫБЕРИТЕ u. hasdbaccess, p.default_schema_name ИЗ sys.database_principals p ПРИСОЕДИНЯЙТЕСЬ к sys.sysusers u ON p.principal_id = u.uid ГДЕ p.name = ‘гость’; |
Запрос должен вернуть значение hasdbaccess
0
, указывающее, что учетная запись пользователя отключена, как показано на рис. 10. Запрос также должен вернуть guest
в качестве схемы по умолчанию.
Рисунок 10. Статус включения гостевой учетной записи пользователя
Если вопреки всем советам вы решите включить гостевую учетную запись , вы должны предоставить пользователю разрешение
CONNECT
, как показано в следующем примере:
ПРЕДОСТАВЛЕНИЕ ПОДКЛЮЧЕНИЯ К гостю; ГО |
Предоставление разрешения CONNECT
— это все, что нужно для включения гостя
пользователь. Если вы повторно запустите предыдущую инструкцию SELECT
, значение hasdbaccess
теперь должно быть 1
.
В любой момент (чем раньше, тем лучше) вы можете отключить учетную запись гостя, отменив разрешение CONNECT
:
ОТМЕНИТЬ ПОДКЛЮЧЕНИЕ ОТ гостя; ГО |
Чтобы проверить, содержит ли схема guest
какие-либо объекты, выполните следующий запрос, который обычно возвращает нулевые строки:
ВЫБЕРИТЕ o.name ИЗ sys.all_objects o ПРИСОЕДИНЯЙТЕСЬ к sys.schemas s ON o.schema_id = s.schema_id ГДЕ s.name = 'guest '; |
Если вы хотите включить пользователя guest
, вы можете добавить объекты в схему guest
специально для доступа этого пользователя, но есть вероятность, что вы не коснетесь ни одного из них.
Пользователь базы данных sys и схема
Каждая база данных включает пользователя sys
и схему sys
. Пользователь sys
владеет схемой sys
. Пользователь не служит никакой другой цели. Он не связан с входом в систему и по умолчанию отключен. По всей вероятности, вам никогда не придется взаимодействовать с этой учетной записью пользователя.
Схема sys
— это отдельная история. Ядру базы данных требуется схема для внутреннего использования. Вы не можете изменить или удалить схему. Он содержит ряд важных системных объектов, таких как системные таблицы, представления каталогов, представления динамического управления и встроенные функции. Вы уже видели несколько представлений каталога в действии в предыдущих примерах. 9Схема 0025 sys особенно удобна для доступа к метаданным SQL Server.
Вы можете просмотреть объекты в схеме sys
, выполнив следующий запрос:
1 2 3 4 5 6 7 8 | USE ImportSales1; GO SELECT o. type_desc, o.name FROM sys.all_objects o JOIN sys.schemas s ON o.schema_id = s.schema_id ГДЕ s.name = ‘sys’ ORDER BY o.type_desc, o.name; |
В этом случае оператор SELECT
относится к базе данных ImportSales1
. В моей системе оператор возвращает 2273 строки, разбитые на 12 типов объектов. Чтобы просмотреть список типов объектов, выполните следующий запрос:
1 2 3 4 5 6 | ВЫБРАТЬ отдельный o.type_desc ИЗ sys.all_objects o ПРИСОЕДИНИТЬСЯ к sys.schemas s ON o.schema_id = s.schema_id ГДЕ s.name = ‘sys’ ЗАКАЗАТЬ ПО o.type_desc |
На рис. 11 показаны результаты, полученные при выполнении оператора SELECT
.
Рисунок 11. Типы объектов в схеме sys
Вы также можете получить список объектов по типу, как показано в следующем примере:
1 2 3 4 5 6 7 | SELECT o. name FROM sys.all_objects o JOIN sys.schemas s ON o.schema_id = s.schema_id ГДЕ s.name = ‘sys ‘ И o.type_desc = ‘ВИД’ ЗАКАЗ o.name; |
Оператор возвращает только объекты типа VIEW
. На рис. 12 показана часть полученных мною результатов. Всего было 473 ряда.
Рисунок 12. Частичный список представлений в схеме sys
Для получения дополнительной информации о представлениях каталога и представлениях динамического управления см. мою статью Simple Talk «Системные представления SQL Server: основы».
Пользователь базы данных INFORMATION_SCHEMA и схема
Как и sys
, каждая база данных также включает пользователя INFORMATION_SCHEMA
и схему INFORMATION_SCHEMA
. Опять же, пользователь существует только для поддержки схемы. Вы не можете удалить пользователя, но по умолчанию он отключен.
В отличие от sys
схема INFORMATION_SCHEMA
содержит лишь небольшое количество представлений и не содержит других типов объектов. Вы можете подтвердить это, выполнив следующую инструкцию SELECT
:
1 2 3 4 5 6 | SELECT o.name FROM sys.all_objects o JOIN sys.schemas s ON o.schema_id = s.schema_id ГДЕ s.name = ‘INFORMATION_SCHEMA’ ЗАКАЗАТЬ o.name; |
На рис. 13 показана часть результатов, которые я получил. Всего существует 21 представление INFORMATION_SCHEMA
для базы данных ImportSales1
.
Рисунок 13. Частичный список представлений в схеме INFORMATION_SCHEMA
Дополнительные сведения о представлениях INFORMATION_SCHEMA
см. в той же статье Simple Talk, SQL Server System Views: The Basics.
Нечетная коллекция предопределенных принципов SQL Server
При работе с SQL Server и его базами данных важно понимать, как работают встроенные принципы, особенно те, которые я рассмотрел здесь. По большей части SQL Server пытается настроить этих принципалов таким образом, чтобы наилучшим образом защитить ваши данные, например, отключить пользователя базы данных sa
или пользователя базы данных guest
, но это не мешает вам предпринимать шаги, которые могут нарушить операций или, что еще хуже, подвергать ваши данные угрозам безопасности. Чем лучше вы понимаете, как работать с участниками сервера и базы данных, тем лучше вы сможете защитить свой экземпляр SQL Server и его базы данных.
Рекомендации по защите учетной записи SQL Server sa
Автор: K. Brian Kelley |
Комментарии (3) | Связанные: > Безопасность
Проблема
Я знаю, что передовой опыт говорит о защите учетной записи SQL Server sa. Однако я не
уверен, что все, что я должен сделать, чтобы защитить свои SQL-серверы. Какие шаги я должен
брать?
Решение
Каждый раз, когда у вас есть известная учетная запись, например администратор в Windows
system или sa для SQL Server, вы должны предпринять определенные шаги для его защиты. Давайте
посмотри конкретно что тебе делать с sa:
- Установите трудно угадываемый пароль.
- Переименовать sa.
- Отключить СА.
- Убедитесь, что не существует других учетных записей с именем sa.
Установить сложный пароль
Даже если вы используете только проверку подлинности Windows, обязательно установите
угадать пароль для учетной записи sa. В конце концов, разница между SQL
Сервер, принимающий только логины Windows, принимает как Windows, так и SQL Server
логины — это изменение реестра и перезагрузка.
Желательно при выборе пароля использовать генератор паролей, чтобы
пароль будет сложно запомнить. В то время как пароли, генерируемые такими генераторами
можно запомнить (большинство из нас так и сделали), это обычно происходит потому, что
учетная запись используется снова и снова, и пароль вводится повторно. Если вы
никогда не используйте пароль, скорее всего, он не запомнится.
Но что, если вам нужно сохранить его для аварийного восстановления? В этом
случае, следуя стандартным процедурам вашей организации в отношении
защиты таких учетных записей и паролей. Ваши администраторы Windows должны
уже столкнулись с теми же проблемами в отношении сохранения конкретных
пароли для контроллеров домена и отдельных учетных записей и паролей, которые будут
в состоянии администрировать вашу среду Active Directory. Логины sa должны быть
относятся с одинаковой безопасностью.
Переименуйте SQL Server sa Login
Если вы откроете SQL Server Management Studio и увидите что-то вроде этого
в папке Безопасность,
вам, вероятно, нужно переименовать sa:
Однако способ проверить, является ли это исходной учетной записью sa, заключается в следующем:
запрос sys.sql_logins так:
ВЫБЕРИТЕ имя ИЗ sys.sql_logins ГДЕ Сид = 0x01;
Sid, или идентификатор безопасности, важен. Учетная запись sa всегда
0x01. Этот запрос определяет, является ли логин с именем sa исходным sa.
аккаунт или новый. Мы доберемся до того, что делать, если это новый в немного. Если
это оригинал, вы должны увидеть результат, как показано ниже:
Так как же нам его переименовать? Ну, мы не можем использовать графический интерфейс, если откроем
характеристики. Обратите внимание, что имя выделено серым цветом:
.
Хитрость заключается в том, чтобы щелкнуть правой кнопкой мыши на sa и выбрать переименование:
Другой вариант — использовать T-SQL:
ИЗМЕНИТЬ ВХОД [sa] С ИМЯ = [old_sa];
Затем, если я обновлю папку Logins, я увижу, что учетная запись sa переименована.
Отключить учетную запись SQL Server sa
Вы не должны останавливаться на переименовании учетной записи sa. Вы также должны отключить его.
В то время как кто-то, у кого есть разрешение, чтобы определить, какой логин для sid
0x01 наверное можно переименовать учетную запись, это простая мера и стоит того
секунд, необходимых для выполнения. Это еще один шаг, который должен сделать злоумышленник.
преодолеть, чтобы скомпрометировать логин. Есть два способа отключить учетную запись.
сначала через графический интерфейс:
Вы также можете сделать это через T-SQL (убедитесь, что вы указали правильный логин, поскольку вы уже должны были его переименовать):
ИЗМЕНИТЬ ВХОД [old_sa] ЗАПРЕЩАТЬ;
Убедитесь, что другие логины не называются sa
Рекомендация против использования учетной записи sa для приложений значительно превышает
десятилетие. Однако, несмотря на это, сегодня все еще есть приложения, которые все еще хотят
используйте «sa» специально. В результате некоторые будут включать создание учетной записи sa в
их развертывание приложения, даже если приложение способно использовать
другой аккаунт. Поэтому рекомендуется периодически проверять
посмотрите, был ли создан логин с именем sa на каждом из ваших SQL-серверов. Ты можешь
визуально проверьте через графический интерфейс, или вы можете написать простой скрипт, который выполняет
следующий запрос ко всем вашим серверам SQL:
ВЫБЕРИТЕ сторону, имя ИЗ sys.sql_logins ГДЕ имя = 'са';
Очевидно, вы не хотите возвращать никаких результатов:
Но не помешает ли это вам определить, используется ли sa для попытки
и подключить? Нет, не будет. Если вы проводите аудит неудачных входов в систему, вы увидите
следующую запись в журналах SQL Server, если кто-то пытается подключиться. Обратите внимание, что
это указывает на то, что логин не существует.
Как насчет олицетворения, владения базой данных и агента SQL Server?
Переименование и отключение учетной записи sa не остановит внутренние процессы от
возможность использовать учетную запись sa. Поэтому, если у вас есть базы данных, владельцы которых
есть, нет проблем. Это хорошо, потому что некоторые базы данных,
как master и tempdb, требуют учетную запись sa в качестве владельца. Кроме того, наличие SQL
Задания агента сервера, принадлежащие sa, также не будут прерываться. Олицетворение все еще работает.
Следовательно, нет причин НЕ переименовывать и отключать учетную запись sa.
Как насчет пакетов обновлений и накопительных обновлений?
Теоретически они должны нормально устанавливаться даже с переименованным и отключенным sa
счет. На практике, однако, было несколько икоты. Поэтому,
моей стандартной практикой является сценарий переименования обратно в sa и включение
учетную запись непосредственно перед применением любого вида обновления к SQL Server и
затем в скрипте переименовать и отключить учетную запись сразу после
обновлять. Это самый безопасный подход, который я нашел.
Следующие шаги
- Узнайте, как использовать
Профилировщик SQL Server, чтобы определить, входит ли кто-то в систему как sa.