В настоящее время я работаю над единой регистрацией на сервере базы данных в чистой среде домена Windows.
И поскольку серверы MySQL Enterprise и MSSQL в настоящее время недоступны, он перешел к MariaDB с плагином GSSAPI.
Вот что у меня сейчас есть:
Сервер:
Windows 7 x64 член MYDOMAIN
MariaDB 10.2.14 x64
Apache2 2.4.33 x64 VC11 + mod_authnz_sspi + PHP 5.6.35 + mod_fcgid
MariaDB ODBC Драйвер x64
HeidiSQL (SQL-клиент поставляется с установщиком MariaDB)
FCGID-Config выглядит следующим образом («A:» — это не дисковод гибких дисков на моей машине, но где я на самом деле положил свой Apache2):
<IfModule !fcgid_module>
LoadModule fcgid_module modules/mod_fcgid.so
FcgidIOTimeout 64
FcgidConnectTimeout 16
FcgidMaxRequestsPerProcess 200
FcgidMaxProcesses 500
FcgidMaxRequestLen 8131072
FcgidInitialEnv PHPRC "A:/php"FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 200
FcgidWrapper "A:/php/php-cgi.exe" .php
</IfModule>
Directory-Config выглядит следующим образом:
<Directory "${SRVROOT}/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
AuthName "MYSERVER"AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
SSPIOfferSSPI On
<RequireAll>
<RequireAny>
Require sspi-group mygroup
</RequireAny>
<RequireNone>
Require user "ANONYMOUS LOGON"</RequireNone>
</RequireAll>
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
<FilesMatch \.php>
AddHandler fcgid-script .php
</FilesMatch>
Options +ExecCGI
</Directory>
Ничего сложного в php.ini не было, просто взял пример php.ini-development (поставляется в пакете PHP zip) и включил расширения php_mysql, php_mysqli, php_mbstring и php_ldap.
Моя текущая MariaDBs my.ini выглядит следующим образом:
[mysqld]
datadir=M:/data
port=3306
key_buffer_size = 384M
max_allowed_packet = 512M
table_open_cache = 512
read_buffer_size = 256M
read_rnd_buffer_size = 128M
sort_buffer_size = 512M
query_cache_size = 32M
join_buffer_size = 128M
default-storage-engine = INNODB
innodb-page-size = 65536
innodb_buffer_pool_size = 4G
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_thread_concurrency = 16
innodb_log_buffer_size = 8M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
character-set-server=utf8
thread_concurrency = 8
thread_cache_size = 8
[client]
port = 3306
plugin-dir = M:/lib/plugin
[mysqldump]
quick
max_allowed_packet = 512M
[mysql]
no-auto-rehash
safe-updates
Клиент:
Windows 10 x64 член MYDOMAIN
Internet Explorer 11
MySQL Workbench 6.0 CE (6.0.7.11215)
После настройки я подключаю VIA HeidiSQL (или любой SQL-клиент) к MariaDB-серверу с учетной записью root и создаю фактического пользователя, как описано здесь. https://mariadb.com/kb/en/library/authentication-plugin-gssapi/ :
CREATE USER myuser IDENTIFIED VIA gssapi AS 'myuser@MYDOMAIN';
Теперь при подключении с HeidiSQL или после предоставления MySQL Workbench auth_gssapi_client.dll (и пока процесс выполняется как myuser) у меня нет проблем с подключением к MariaDB-серверу.
Прежде чем пытаться соединиться с PHP, я взглянул на phpinfo (); где все выглядит так, как ожидалось, с $ _SERVER vars REMOTE_USER, PHP_AUTH_USER и PHP_AUTH_PW.
Вот мой index.php:
<?php
//phpinfo(); exit;
$m = mysql_connect("localhost", $_SERVER["PHP_AUTH_USER"]);
$mi = mysqli_connect("localhost", $_SERVER["PHP_AUTH_USER"]);
$c = odbc_connect("MariaDB", $_SERVER["PHP_AUTH_USER"], "");
?>
Как вы можете видеть в какой-то момент, я установил SystemDSN с ODBC-коннектором MariaDB и назвал его MariaDB, который указывает на каталог плагинов MariaDBs.
С этим я мог бы по крайней мере попытаться заставить это работать вообще и после этого волноваться об этом:
Warning: mysql_connect(): The server requested authentication method unknown to the client [auth_gssapi_client] in A:\htdocs\index.php on line 3
Warning: mysql_connect(): The server requested authentication method unknown to the client in A:\htdocs\index.php on line 3
Warning: mysqli_connect(): The server requested authentication method unknown to the client [auth_gssapi_client] in A:\htdocs\index.php on line 4
Warning: mysqli_connect(): (HY000/2054): The server requested authentication method unknown to the client in A:\htdocs\index.php on line 4
Я не смог найти никакого решения о том, как указать расширения php для mysql или mysqli (или, как я также тестировал с тем же результатом pdo_mysql) на плагин auth_gssapi_client.dll из MariaDB.
Так что, если бы кто-нибудь мог указать мне на это, это также было бы оценено.
Но настоящая проблема, с которой я (очень вероятно) столкнулся бы с mysql и mysqli, является результатом соединения odbc …:
Warning: odbc_connect(): SQL error: [ma-3.0.3]GSSAPI name mismatch, requested 'myuser@MYDOMAIN', actual name 'myserver$@MYDOMAIN', SQL state 28000 in SQLConnect in A:\htdocs\index.php on line 5
Сам процесс обычно работает как локальная система, к сожалению, GSSAPI заинтересован только в том, чтобы пользователь запускал процесс, а не в аутентифицированном пользователе.
Я искал в интернете и пробую что-то около недели, чтобы это заработало, хотя все еще без какого-либо результата работы (или какой-либо остающейся идеи о том, что попробовать дальше в этом отношении).
Так что, если у кого-то есть идея, как заставить это работать, это было бы здорово.
Greetz TheSkyGuy
Предупреждение: odbc_connect (): ошибка SQL: [ma-3.0.3] Несоответствие имени GSSAPI,
запрашивается myuser @ MYDOMAIN, фактическое имя myserver $ @ MYDOMAIN, SQL
состояние 28000 в SQLConnect в A: \ htdocs \ index.php в строке 5
это означает, что ваше приложение (apache?) подключается к учетной записи компьютера, возможно, оно запускается как пользователь NetworkService или что-то в этом роде. Если вы можете запустить его под учетными данными «myuser» пользователя домена, то он подключится.
Кроме того, вы можете создать учетную запись пользователя MariaDB, соответствующую учетной записи компьютера, и использовать ее для подключения.
Других решений пока нет …