Архив метки: SQL

MySQL. Комментарии в глубину

Описание : в этой статье вы узнаете, как использовать комментарий MySQL для документирования оператора SQL или блока кода в MySQL.

Комментарии

Комментарии могут использоваться для документирования назначения оператора SQL или логики блока кода в хранимой процедуре. При разборе кода SQL, MySQL игнорирует часть комментариев. Он выполняет только часть SQL, за исключением исполняемого комментария, который мы обсудим в следующем разделе. Читать

Быстрый SQL Server пентест с NMAP

Информация о сервере SQL и пустой пароль с именем пользователя = sa check & ms-sql-dac test:

sudo nmap -d -p 1433 –script ms-sql-info,ms-sql-empty-password 192.168.0.100

sudo nmap -sU -p 1434 –script ms-sql-dac 192.168.0.100 

Брутфорс пользователей и паролей или проверки успеха входа в систему:

sudo nmap -p 1433 –script ms-sql-brute –script-args userdb=”/home/user/customuser.txt”,passdb=”/home/user/passsql.txt” 192.168.0.100 

Информация о сервере + брутфорс

sudo nmap -p 1433 -script ms-sql-info, ms-sql-brute -script-args ms-sql-brute.ignore-lockout, userdb = "/ home / user / customuser.txt", passdb = "/ home /user/passsql.txt "192.168.0.11

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

sudo nmap -p 1433 <ip> –script ms-sql-dump-hashes

sudo nmap -p 1433 –script ms-sql-dump-hashes,ms-sql-hasdbaccess,ms-sql-config –script-args mssql.username=UNAME,mssql.password=UPWD 192.168.0.100

sudo nmap -p 1433 –script ms-sql-dump-hashes,ms-sql-hasdbaccess,ms-sql-config –script-args mssql.username=UNAME,mssql.password=UPWD,ms-sql-config.showall 192.168.0.100

Выполнение пользовательских запросов:

sudo nmap -p 1433 –script ms-sql-query –script-args mssql.username=UNAME,mssql.password=UPWD,ms-sql-query.query=”SELECT @@version version” 192.168.220.123

sudo nmap -p 1433 –script ms-sql-query –script-args mssql.username=UNAME,mssql.password=UPWD,mssql.database=tempdb,ms-sql-query.query=”SELECT * FROM master..syslogins” 192.168.220.123

Список таблиц:

 sudo nmap -p 1433 –script ms-sql-tables –script-args ms-sql-tables.maxdb=0,ms-sql-tables.maxtables=0,mssql.username=UNAME,mssql.password=UPWD 192.168.220.123 

Поиск SQL-сервера в широковещательной сети:

nmap –script broadcast-ms-sql-discover,ms-sql-info –script-args=newtargets

nmap –script broadcast-ms-sql-discover

¯_(ツ)_/¯

Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.



2018-07-16T14:16:18
Аудит ИБ

Найди отличия в таблицах SQL

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

Для этих целей отлично пригодилась утилита Tablediff , главное требование чтобы таблицы имели одинаковую структуру и содержали первичный ключ либо столбец идентификатора  identity, rowguid или уникальный ключ.
Плюс этой утилиты в том что можно легко сравнивать таблицы с разных серверов и конечно же есть возможность привести таблицы к единому виду добавив всего лишь один параметр -f и получить необходимый скрипт .

Если таблицы не совпадают по структуре проще написать свой запрос для сравнения используя связанные серверы и команды INTESECT  и EXCEPT или создать представления и сравнить их. Читать

Дать права к представлению без права на таблицу.

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

Если кратко то  в случае когда  объектами владеет один и тот же  владелец то включается механизм цепочки владения  который позволяет исключить проверку прав для входящих в процедуру  или представление объектов.
Например хотим создать отдельную схему и дать доступ пользователю только на объекты данной схемы. Подробнее можно почитать тут
Создаем схему указываем владельца dbo, т.к будем использовать  в  представлениях и процедурах объекты данной схемы, таким образом включается цепочка наследования.
! Необходимо указать правильного владельца сразу иначе цепочка оборвется и придется пересоздавать схему.
CREATE SCHEMA [MDM] AUTHORIZATION [dbo]
Далее создаем представление, которое использует например  таблице TEST в схеме dbo
CREATE VIEW MDM.TESTVIEW AS
SELECT *
FROM dbo.TEST
Даем права нашему пользователю на селект и  грант, без гранта работать не будет.
GRANT SELECT , VIEW DEFINITION ON MDM.TESTVIEW TO [TestUser] WITH GRANT OPTION
Проверяем доступ  к представлению и убеждаемся что все работает

PS скриптом ниже можно проверить все права пользователя
EXECUTE AS LOGIN = N'TestUser';
GO
DECLARE @login NVARCHAR(256), @user NVARCHAR(256);
SELECT @login = login_name FROM sys.dm_exec_sessions WHERE session_id = @@SPID;
SELECT @user = d.name
  FROM sys.database_principals AS d
  INNER JOIN sys.server_principals AS s
  ON d.sid = s.sid
  WHERE s.name = @login;
SELECT u.name, r.name
  FROM sys.database_role_members AS m
  INNER JOIN sys.database_principals AS r
  ON m.role_principal_id = r.principal_id
  INNER JOIN sys.database_principals AS u
  ON u.principal_id = m.member_principal_id
  WHERE u.name = @user;
SELECT class_desc, major_id, permission_name, state_desc
  FROM sys.database_permissions
  WHERE grantee_principal_id = USER_ID(@user);
GO
REVERT;

Автор: Roman D
Дата публикации: 2016-03-04T06:42:00.001-08:00

Функция для подсчета количества рабочих часов

Бывает иногда полезной такая функция,  рассчитывает количество рабочих часов между датами
DECLARE @startdate datetime
DECLARE @enddate DATETIME
SET @startdate = '2015-04-28 12:33:19.000'
SET @enddate = '2015-04-30 09:45:20.000'
SELECT [dbo].[ufn_CalcWorkTime] (@startdate, @enddate) 
Результат расчета в часах
Текст самой функции
ALTER FUNCTION [dbo].[ufn_CalcWorkTime]
(
       @startdate     DATETIME,
       @enddate       DATETIME
)
RETURNS DECIMAL(10, 3)
AS
BEGIN
       —DECLARE @startdate datetime
       —DECLARE @enddate DATETIME
       DECLARE @ldate DATETIME,
               @rdate DATETIME,
               @ldaystartdate DATETIME,
               @rdaystartdate DATETIME,
               @StartWorkTime AS VARCHAR(8) = ' 9:30:00',
               @EndWorkTime AS VARCHAR(8) = ' 18:30:00',
               @DayzBetween AS INT
      
       DECLARE @result AS DECIMAL(10, 3)
       DECLARE @add_days       INT,
               @minus_days     INT
       —SET @startdate = '2015-12-18 16:07:54.000'
       —SET @enddate = '2015-12-22 12:21:56.000'
      
       SET @ldate = CAST(
               (CONVERT(VARCHAR(10), @startdate, 102) + @EndWorkTime) AS DATETIME
           )
      
       SET @ldate = CASE
                         WHEN @ldate > @startdate THEN @ldate
                         ELSE @startdate
                    END
      
       SET @ldaystartdate = CAST(
               (CONVERT(VARCHAR(10), @startdate, 102) + @StartWorkTime) AS DATETIME
           )
      
       SET @rdaystartdate = CASE
                                 WHEN @enddate > @rdaystartdate THEN @rdaystartdate
                                 ELSE @enddate
                            END
      
       SET @rdate = CAST(
               (CONVERT(VARCHAR(10), @enddate, 102) + @EndWorkTime) AS DATETIME
           )
      
       SET @rdate = CASE
                         WHEN @rdate < @enddate THEN @rdate
                         ELSE @enddate
                    END
      
       SET @rdaystartdate = CAST(
               (CONVERT(VARCHAR(10), @enddate, 102) + @StartWorkTime) AS DATETIME
           )
      
       SET @rdaystartdate = CASE
                                 WHEN @enddate > @rdaystartdate THEN @rdaystartdate
                                 ELSE @enddate
                            END
      
       SET @DayzBetween = (
               (
                   DATEDIFF(
                       dd,
                       CONVERT(VARCHAR(10), @startdate, 102),
                       CONVERT(VARCHAR(10), @enddate, 102)
                   )
               )
               -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
               -(CASE WHEN DATEPART(DW, @StartDate) = 6 THEN 1 ELSE 0 END)
               -(CASE WHEN DATEPART(DW, @StartDate) = 7 THEN 1 ELSE 0 END)
           )
      
       —добавим рабочие праздники
       SELECT @add_days = COUNT(*)
       FROM   HolidaysAndWeekends (NOLOCK)
       WHERE  Дата BETWEEN @startdate AND @enddate
              AND [Рабочий День] = 1
      
      
       —вычтем выходные рабочие дни
       SELECT @minus_days = COUNT(*)
       FROM  HolidaysAndWeekends (NOLOCK)
     

Windows 1C 7.7 SQL тормоза на новом сервере

Стояла 1С SQL2008 на 2008 r2 , переехала на 2012 r2. Железо новое, но появились тормоза при проведении проводок, и выборке за большой период. Долго искали причину. Оказалось дело во включенной в биосе технологии Intel SpeedStep
При выключении — скорость работы существенно увеличилась.

Автор: Viktor