GSSAPI-PHP를 사용한 MariaDB 인증(Windows)
저는 현재 깨끗한 Windows Domain 환경에서 Single Sign On to a Database-Server 작업을 하고 있습니다.
그리고 MySQL Enterprise와 MSSQL 서버는 현재 옵션이 없기 때문에 GSSAPI 플러그인을 사용하여 MariaDB로 넘어왔습니다.
제가 현재 가지고 있는 것은 다음과 같습니다.
서버:
- 마이도메인의 Windows 7 x 64 멤버
- MariaDB 10.2.14 x64
- Apache22.4.33 x64 VC11 + mod_authnz_sspi + PHP 5.6.35 + mod_fcgid
- MariaDB ODBC 드라이버 x64
- HeidiSQL(MariaDB 설치 관리자와 함께 제공되는 SQL-Client)
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 개발 예제(PHP zip 패키지로 제공됨)를 가져가서 php_mysql, 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 멤버
- 인터넷 익스플로러 11
- MySQL Workbench 6.0 CE (6.0.7.11215)
모든 것을 설정한 후 루트 계정으로 VIA HeidiSQL(또는 임의의 SQL-Client)을 MariaDB-Server에 연결하고 여기 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을 제공한 후(프로세스가 내 사용자로 실행되는 동안) MariaDB-Server에 연결하는 데 문제가 없습니다.
PHP와 연결하기 전에 $_SERVER vars Remote_USER, PHP_AUTH_USER 및 PHP_AUTH_PW로 모든 것이 기대만큼 보이는 phpinfo()를 살펴 보았습니다.
여기 제 인덱스가 있습니다.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"], "");
?>
당신이 어느 시점에서 볼 수 있듯이 나는 시스템을 설정했습니다.MariaDB ODBC Connector가 있는 DSN에서 MariaDBs Plugin dir을 가리키는 MariaDB라고 합니다.
그 덕분에 적어도 작동이 가능하도록 노력할 수 있었고 그 후에는 다음과 같은 걱정을 할 수 있었습니다.
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
mysql 또는 mysqli에 대한 php 확장자를 MariaDB의 auth_gssapi_client.dll 플러그인에 가리키는 방법에 대한 해결책을 찾을 수 없었습니다.누군가 저를 지목해 주신다면 감사할 것입니다.
하지만 제가 mysql과 mysqli와 마주칠 수 있는 진짜 문제는 odbc connect의 결과입니다.
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는 프로세스를 실행하는 사용자에게만 관심이 있고 인증된 사용자에게는 관심이 없습니다.
저는 인터넷을 검색하고 작동하기 위해 약 일주일 동안 무언가를 시도하고 있지만, 여전히 작동하는 결과는 없습니다(또는 그와 관련하여 다음에 무엇을 시도해야 할지에 대한 남은 아이디어).
그래서 만약 누군가 그것을 어떻게 작동시킬지에 대한 아이디어를 가지고 있다면 좋을 것입니다.
경고: odbc_connect(): SQL 오류: [ma-3.0.3]GSSAPI 이름이 일치하지 않아 'myuser@'를 요청했습니다.MYDOMAIN', 실제 이름 'myserver$@MYDOMAIN', A:\htdocs\index.php의 SQL Connect에서 SQL 상태 28000
즉, 응용프로그램(apache?)이 컴퓨터 계정(Network Service 사용자로 실행되는 경우)과 연결됩니다.도메인 사용자 "myuser" 자격 증명으로 실행할 수 있으면 연결됩니다.
또는 시스템 계정에 해당하는 MariaDB 사용자 계정을 생성하여 연결에 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/50061026/gssapi-auth-with-php-to-mariadb-windows
'programing' 카테고리의 다른 글
| sql 그룹 대 구별 (0) | 2023.10.31 |
|---|---|
| wmain과 main의 차이점은 무엇입니까? (0) | 2023.10.31 |
| AngularJS + Safari:페이지 전환 시 페이지를 맨 위로 강제 스크롤 (0) | 2023.10.31 |
| 핸들 리디렉션(angularjs $http) (0) | 2023.10.31 |
| MySQL Workbench에서 limit 절 제거 (0) | 2023.10.31 |