Возникли проблемы с check_mssql_health
Скомпилировалось и поставилось наура.
Во время тестирования плагина сказало, что не хватает DBD Sybase в перле.
Поставил через Synaptic.
А вот теперь не пойму, как заставить работать при доменной аутентификации, плагин требует пароль. У меня в домене Administrator без пароля.
а в строке 1951 в check_mssql_health пароль требуется всегда
if ((! $self->{hostname} && ! $self->{server}) ||
! $self->{username} || ! $self->{password}) {
$self->{errstr} = "Please specify hostname or server, username and password";
return undef;
}
Пользователя домена задаю как DOMAINNAME\\Administrator
Исходная тестовая команда выглядит так
./check_mssql_health --hostname 192.168.1.2 --username DOMAINNAME\\Administrator --password '' --mode cpu-busy
Ругается, что пароль не задан, что и правильно в принципе, а как тогда поступить?
А выводит
CRITICAL - cannot connect to 192.168.1.2. DBI connect(';host=192.168.1.2;port=1433','DOMAINNAME\Administrator',...) failed: (no error string) at ./check_mssql_health line 1977
в той строке собственно и проверяется возможность подключения к базе с указанными параметрами.
Еще вроде как в строку подключения к базе необходимо бы дописать Trusted_Connection=Yes; или Integrated Security=SSPI, но это никак не передать в плагин.
Пробовал с check_mysql_health - все работет, но там и проблемы с доменной аутентификацией в базе нет.
Еще, на сайте разработчика есть такой скрипт
declare @dbname varchar(255)
declare @check_mssql_health_USER varchar(255)
declare @check_mssql_health_PASS varchar(255)
declare @check_mssql_health_ROLE varchar(255)
declare @source varchar(255)
declare @options varchar(255)
declare @backslash int
/*******************************************************************/
SET @check_mssql_health_USER = '"[Servername|Domainname]\Username"'
SET @check_mssql_health_PASS = 'Password'
SET @check_mssql_health_ROLE = 'Rolename'
/*******************************************************************
PLEASE CHANGE THE ABOVE VALUES ACCORDING TO YOUR REQUIREMENTS
- Example for Windows authentication:
SET @check_mssql_health_USER = '"[Servername|Domainname]\Username"'
SET @check_mssql_health_ROLE = 'Rolename'
- Example for SQL Server authentication:
SET @check_mssql_health_USER = 'Username'
SET @check_mssql_health_PASS = 'Password'
SET @check_mssql_health_ROLE = 'Rolename'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
It is strongly recommended to use Windows authentication. Otherwise
you will get no reliable results for database usage.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*********** NO NEED TO CHANGE ANYTHING BELOW THIS LINE *************/
SET @options = 'DEFAULT_DATABASE=MASTER, DEFAULT_LANGUAGE=English'
SET @backslash = (SELECT CHARINDEX('\', @check_mssql_health_USER))
IF @backslash > 0
BEGIN
SET @source = ' FROM WINDOWS'
SET @options = ' WITH ' + @options
END
ELSE
BEGIN
SET @source = ''
SET @options = ' WITH PASSWORD=''' + @check_mssql_health_PASS + ''',' + @options
END
PRINT 'CREATE Nagios plugin user ' + @check_mssql_health_USER
EXEC ('CREATE LOGIN ' + @check_mssql_health_USER + @source + @options)
EXEC ('USE MASTER GRANT VIEW SERVER STATE TO ' + @check_mssql_health_USER)
PRINT 'User ' + @check_mssql_health_USER + ' created.'
PRINT ''
declare dblist cursor for
select name from sysdatabases WHERE name NOT IN ('master', 'tempdb', 'msdb') open dblist
fetch next from dblist into @dbname
while @@fetch_status = 0 begin
EXEC ('USE ' + @dbname + ' print ''GRANT permissions IN the db '' + ''"'' + DB_NAME() + ''"''')
EXEC ('USE ' + @dbname + ' CREATE ROLE ' + @check_mssql_health_ROLE)
EXEC ('USE ' + @dbname + ' GRANT EXECUTE TO ' + @check_mssql_health_ROLE)
EXEC ('USE ' + @dbname + ' GRANT VIEW DATABASE STATE TO ' + @check_mssql_health_ROLE)
EXEC ('USE ' + @dbname + ' GRANT VIEW DEFINITION TO ' + @check_mssql_health_ROLE)
EXEC ('USE ' + @dbname + ' CREATE USER ' + @check_mssql_health_USER + ' FOR LOGIN ' + @check_mssql_health_USER)
EXEC ('USE ' + @dbname + ' EXEC sp_addrolemember ' + @check_mssql_health_ROLE + ' , ' + @check_mssql_health_USER)
EXEC ('USE ' + @dbname + ' print ''Permissions IN the db '' + ''"'' + DB_NAME() + ''" granted.''')
fetch next from dblist into @dbname
end
close dblist
deallocate dblist
Вижу, что необходима предподготовка базы и что рекомендуется также доменная аутентификация. (свои параметры в SQL я подставил, только с ролью сомневаюсь как правильно задать). Но скрипт слетает уже на строчке
IF @backslash > 0
> - это "greater than" как > - просто не пропечатался в HTML?
Есть, кто с этим делом сталкивался?