Определяем логин пользователя по его SID средствами MS SQL
Здравствуйте. Будучи администратором БД (Microsoft Dynamics NAV), возникла задача выдавать/проверять наличие роли SQL db_datareader для некоторых работников. Но в таблице список пользователей хранился в виде SID windows: S-1-5-21-3879… и записи постоянно добавлялись. Другими словами необходимо было конвертировать из S-1-5-21-38… → aapetrov.
Серверов было около 70-ти и хотелось все сделать стандартными средствами (не использовать, например psgetsid.exe).
Как и положено начал с гугла — ничего полезного не нашел. Пришлось обратиться за помощью на многоуважаемый форум. Было предложено множество вариантов, за что огромное спасибо добрым людям, но увы, решение так и не было найдено.
«Если даже ребята с sql.ru не смогли подсказать — подумал я — значит все, это конец».
И вот на грани нервного срыва, проблему все-таки удалось разрешить.
- S — говорит нам о том, что это именно SID;
- 1 — уровень контроля;
- 5 — полномочие идентификатора;
- 21 — первое подчиненное полномочие идентификатора;
- 3879291865, 2298129343 и 1096376209 — остальные подчиненные полномочия идентификатора, все вместе они обозначают домен или компьютер, который издал идентификатор SID;
- 3741 — относительный идентификатор.
Теперь сам скрипт. На мой взгляд, лучше всего создать функцию, а потом просто вызывать ее с параметром:
—Проверяем существует ли функция, если да то удаляем и создаем.
IF OBJECT_ID (N’dbo.StringSIDToLogin’, N’FN’) IS NOT NULL
DROP FUNCTION dbo.StringSIDToLogin
GO
CREATE FUNCTION dbo.StringSIDToLogin (@MYSID AS VARCHAR(255))
RETURNS VARCHAR(300)
AS
BEGIN
—получаем бинарное значение
DECLARE @A AS BIGINT ,@B AS BIGINT ,@C AS BIGINT ,@D AS BIGINT
SET @MYSID = REVERSE(@MYSID)
SET @D = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX(‘-‘,@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX(‘-‘,@MYSID)+1,255)
SET @C = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX(‘-‘,@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX(‘-‘,@MYSID)+1,255)
SET @B = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX(‘-‘,@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX(‘-‘,@MYSID)+1,255)
SET @A = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX(‘-‘,@MYSID)-1))
declare @sid_sql VARBINARY(100)
DECLARE @StrLogin VARCHAR(100)
set @sid_sql= 0x010500000000000515000000
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@A)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@B)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@C)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@D)))
—теперь с помощью стандартной функции MS SQL находим логин и убираем префикс домена
set @StrLogin=SUSER_SNAME(@sid_sql)
set @StrLogin=REPLACE (@StrLogin,’dom\’,»)
RETURN (@StrLogin)
END
GO
Как узнать владельца базы данных ms sql
How to query the name of the current SQL Server database instance?
It is a bit of a «chicken or egg» kind of query, but can someone dreamup a query that can return the name of the current database instance in which the query executes? Believe me when I say I understand the paradox: why do you need to know the name of the database instance if you’re already connected to execute the query? Auditing in a multi-database environment.
I’ve looked at all the @@ globals in Books Online. » SELECT @@servername » comes close, but I want the name of the database instance rather than the server.
Узнать объекты владельца
Приветствую всех. Как получить список объектов, которыми владеет какой-то объект? TPanel Panel1 =.
Узнать владельца окна
Есть HWND окна. Как по этому HWND получить какой-либо уникальный идентификатор процесса это окно.
Изменение владельца БД
Доброго времени суток. Досталась мне "в наследство" 1С "Документооборот", крутящаяся на SQL и.
4.3 Пользователи баз данных и схемы
Пользователи баз данных (database users) — это специальные объекты, которые создаются на уровне базы данных и используются для предоставления разрешений в базе данных (на таблицы, представления, хранимые процедуры).
Схема (schema) — представляет собой логическую область в БД, используемую для группировки объектов БД под одним именем (пространство имен), при этом не имеет значения, кто является владельцем объекта. В терминах пространства имен полностью квалифицированное имя объекта будет выглядеть следующим образом:
Использование схем упрощает процесс управления правами доступа к объектам. При распространении прав доступа к объектам учитывается их иерархия, что подразумевает наследование прав доступа.
GRANT SELECT ON SCHEMA :: имя_схемы TO имя_пользователя_БД
Применение схемы дает ряд дополнительных преимуществ по сравнению со старым подходом:
нескольким пользователям можно назначить одну и ту же схему по умолчанию;
несколько пользователей могут владеть одной и той же схемой. При этом один пользователь может являться владельцем сразу нескольких схем;
при удалении пользователя из базы данных не придется переименовывать его объекты;
как уже говорилось, упрощается предоставление разрешений для наборов объектов в базе данных.
4.3.1 Создание, изменение и удаление пользователей базы данных
Создать пользователя базы данных можно:
С помощью графического интерфейса Management Studio из контейнера Имя_Базы_ДанныхSecurity Users;
при помощи команды CREATE USER. Например:
CREATE USER DBUser1 FOR LOGIN Login1 WITH DEFAULT_SCHEMA=dbo
При создании пользователя вам потребуется указать:
имя пользователя;
учетную запись (SQL Server или Windows), которая будет назначена пользователю данной БД. Можно создать пользователя, которому не назначена никакая учетная запись (при помощи переключателя without login или одноименной команды). Пользователи такого типа используются только для дополнительной настройки безопасности в Service Broker;
сертификат или асимметричный ключ;
схему по умолчанию;
для каких схем он будет являться владельцем;
какие роли базы данных будут ему назначены.
Обязательных параметра всего два — имя пользователя и учетная запись.
Изменение свойств пользователя и его удаление
С помощью графического интерфейса Management Studio из контейнера Имя_Базы_ДанныхSecurity Users;
Изменение свойств пользователя — при помощи команды ALTER USER
Удаление пользователя — при помощи команды DROP USER
Удалить пользователя, владеющего какими-либо объектами в базе данных, нельзя.
4.3.2 Встроенные пользователи базы данных
При создании любой базы данных в ней автоматически создаются четыре специальных пользователя:
dbo — пользователь-владелец базы данных, который получает полные права на свою БД (при помощи встроенной роли базы данных db_owner). В SQL Server 2008 dbo имеет возможность удалять свою базу данных;
guest — этот специальный пользователь предназначен для предоставления разрешений всем учетным записям, которым не соответствует ни один пользователь в базе данных.
INFORMATION_SCHEMA — этому пользователю не соответствует ни одна учетная запись. Его единственное значение — быть владельцем схемы INFORMATION_SCHEMA, в которой хранятся представления системной информации;
sys — этому специальному пользователю, как и INFORMATION_SCHEMA, не могут соответствовать учетные записи. Он является владельцем схемы SYS, к которой принадлежат системные объекты базы данных.
Microsoft SQL Server: работа с базами данных
Наши пользователи могут использовать базы данных Microsoft SQL Server 2016 на своих виртуальных площадках в рамках, предусмотренных соответствующими тарифами.
Параметры и способы соединения с Microsoft SQL Server
- Имя хоста (сервера), на котором размещена база данных Microsoft SQL Server: uXXXXX.mssql.masterhost.ru;
- Порт: 1433;
- Логин: соответствует названию виртуальной площадки — uXXXXX;
- Пароль: указан в письме, которое пользователь получает при регистрации;
- Имя базы данных: соответствует названию виртуальной площадки — uXXXXX;
- Подключение нужно осуществлять по протоколу TCP/IP.
Подключение к SQL-серверу через «Microsoft SQL Server Management Studio Express»
Чтобы получить доступ к базе данных Microsoft SQL Server, возможно использовать Microsoft SQL Server Management Studio Express .
В параметрах выберите в качестве сетевого протокола TCP/IP.
Создание новой базы данных
Новую базу данных вы можете создать через раздел Услуги, в Личном кабинете. Выберите нужную «виртуальную площадку», далее в разделе «MS SQL» нажать на кнопку «+ База MS SQL». Затем вам необходимо указать имя (логин) и выбрать владельца новой базы.
Использовать Microsoft SQL Server Management Studio для создания новых баз данных нельзя.
Создание нового логина
Создать новый логин для базы данных Microsoft SQL вы можете через раздел Услуги, в Личном кабинете. Выберите нужную «виртуальную площадку», далее в разделе «MS SQL» нажать на кнопку «+ Пользователь MS SQL». Затем вам необходимо указать имя (логин) для нового пользователя.
Уменьшение физического размера файлов баз данных и лога транзакций MS SQL Server.
Из графического интерфейса Microsoft SQL Server Management Studio:
- В обозревателе объектов подключитесь к экземпляру Microsoft SQL Server, 2016 Web Edition и разверните его.
- Разверните узел «Базы данных», затем правой кнопкой мыши щелкните базу данных, которую нужно сжать.
В меню «Задачи» выберите «Сжать» и щелкните «База данных». Или установите флажок «Реорганизовать файлы перед освобождением неиспользуемого места».
Если он установлен, необходимо указать значение параметра «Максимально доступное свободное место в файлах после сжатия».
Стандартным t-sql запросом вида:
где uXXXXX — имя вашей базы данных.
Изменение кодировки сравнения (collation)
По умолчанию кодировка collation выставлена как Cyrillic_General_CI_AS, изменить кодировку для сравнений можно следующим SQL-запросом:
где uXXXXX — имя БД, где требуется данная операция.
Список доступных кодировок можно узнать так:
Как дать права на доступ к базе определенному логину
Для SQL — дополнительный SQL логин, но настраивать права нужно самому: Заводим еще один SQL логин — uXXX_Ann
Для начала используем нашу базу:
Создаем пользователя для определенного «логина»:
Наделяем его правами (например только чтение таблиц):
Или можем дать пользователю только конкретные права, на конкретные таблицы. Например, давайте дадим пользователю InetUser права на SELECT, INSERT, UPDATE для таблицы test, следующим SQL-запросом :
При всем при этом, при осуществлении доступа через SQL Management Studio, под дополнительным логином не являющимся владельцем базы, не будет видно базу данных в списке доступных баз, но будет возможность выполнять разрешенные SQL-запросы .