방법: Windows 인증을 사용하여 연결
기본적으로 MICROSOFT Drivers for PHP for SQL Server는 Windows 인증을 사용하여 SQL Server에 연결합니다. 대부분의 시나리오에서 이는 웹 서버의 프로세스 ID 또는 스레드 ID(웹 서버가 가장을 사용하는 경우)가 최종 사용자의 ID가 아닌 서버에 연결하는 데 사용된다는 것을 의미합니다.
Windows 인증을 사용하여 SQL Server에 연결할 때는 다음 사항을 고려해야 합니다.
웹 서버의 프로세스(또는 스레드)가 실행되는 자격 증명은 연결을 설정하기 위해 유효한 SQL Server 로그인에 매핑되어야 합니다.
SQL Server와 웹 서버가 서로 다른 컴퓨터에 있는 경우 SQL Server는 원격 연결을 사용하도록 구성되어야 합니다.
참고 항목
데이터베이스 및 ConnectionPooling과 같은 연결 특성은 연결을 설정할 때 설정할 수 있습니다. 지원되는 연결 특성의 전체 목록은 연결 옵션을 참조하세요.
Windows 인증은 다음과 같은 이유로 가능하면 SQL Server에 연결하는 데 사용해야 합니다.
인증하는 동안 네트워크를 통해 자격 증명이 전달되지 않습니다. 사용자 이름 및 비밀번호는 데이터베이스 연결 문자열 포함되지 않습니다. 이는 구성 파일 내의 연결 문자열을 보거나 네트워크를 모니터링하여 악성 사용자 또는 공격자가 자격 증명을 가져올 수 없다는 것을 의미합니다.
사용자는 중앙 집중식 계정 관리의 대상이 됩니다. 여러 번의 잘못된 로그온 요청 이후에는 비밀번호 만료 기간, 최소 비밀번호 길이, 계정 잠금 등의 보안 정책이 강제 적용됩니다.
Windows 인증을 사용하는 것이 현실적이지 않은 경우 방법: SQL Server 인증을 사용하여 연결을 참조하세요.
SQLSRV 예시
Microsoft Drivers for PHP for SQL Server의 SQLSRV 드라이버를 사용하는 경우 다음 예시에서는 Windows 인증을 사용하여 SQL Server의 로컬 인스턴스에 연결합니다. 연결이 설정되면 데이터베이스에 액세스하는 사용자의 로그인이 서버에 쿼리됩니다.
이 예시에서는 SQL Server 및 AdventureWorks 데이터베이스가 로컬 컴퓨터에 설치된 것으로 가정합니다. 모든 출력은 브라우저에서 예시를 실행할 때 브라우저에 기록됩니다.
<?php
/* Specify the server and connection string attributes. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
/* Query SQL Server for the login of the user accessing the
database. */
$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "Error in executing query.</br>";
die( print_r( sqlsrv_errors(), true));
}
/* Retrieve and display the results of the query. */
$row = sqlsrv_fetch_array($stmt);
echo "User login: ".$row[0]."</br>";
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
PDO_SQLSRV 예시
다음 예시에서는 PDO_SQLSRV 드라이버를 사용하여 이전 샘플과 동일한 작업을 수행합니다.
<?php
try {
$conn = new PDO( "sqlsrv:Server=(local);Database=AdventureWorks", NULL, NULL);
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e ) {
die( "Error connecting to SQL Server" );
}
echo "Connected to SQL Server\n";
$query = 'select * from Person.ContactType';
$stmt = $conn->query( $query );
while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){
print_r( $row );
}
?>