2012-06-10 2 views
2

나는 내가 작성한 BRD이라는 새 데이터베이스가있는 SQL Server 2012 Express 설치가 있습니다. 또한 BRD 데이터베이스에 테스트 테이블 (tempDemo) 및 테스트 저장 프로 시저 (getStList)를 만들었습니다. 저장 프로 시저가 쿼리 창에서 실행될 때 작동하므로 테이블과 저장 프로 시저가 합법적이라고 믿습니다. SQL Server는 "SQL Server 및 Windows 인증 모드"로 설정됩니다.SQL Server 2012 클래식 ASP 연결 문자열

"마이크로 소프트 OLE DB : 이것은 다음과 같은 메시지와 함께 실패

objConn.ConnectionString="Provider=SQLOLEDB;Server=XPSI7\SQLEXPRESS;Database=BRD;Integrated Security=SSPI;" 

:

나는 다음 연결 문자열을 사용하여 다음 SQL 서버에 연결 클래식 ASP 페이지를 작성하려고 공급자 SQL Server 오류 '80004005' 로그인 요청한 데이터베이스 "BRD"열 수 없습니다. 로그인하지 못했습니다. "

BRD 대신 MASTER으로 데이터베이스를 변경하면 ASP 페이지에서 오류가 발생하지 않습니다. 난 그냥 연결 문자열을 열고 그것을 닫아서 테스트지만, 그것은 작동하는 것 같습니다.

개체 탐색기에서 MASTERBRD의 보안 설정을 살펴 보았지만 차이점을 확인하지 못했습니다. 나는 또한 폴더에 대해 IIS_IUSRS을 보았지만 아무런 차이가 없었습니다. 어쨌든 이것이 필요한지 확실하지 않습니다.

+1

사용을 시도하고있는 사용자 : –

+0

놀랍도록 빠른 답장을 보내 주셔서 감사합니다. OMG Ponies. 질문은 좋은 것이지만, 나는 그것에 대해 약간 혼란스러워합니다. "사용자"는 정확히 무엇입니까? 연결 문자열에서 나는 하나를 지정하지 않습니다 (나는 생각하지 않습니다). 귀하의 질문에 답변을 시도하기 위해 각 사용자 아래 게스트가 있지만 BRD 게스트는 빨간색 아래쪽 화살표가 있습니다. –

답변

4

SQL Server는 서버 수준에서 로그인을 인증합니다. 그런 다음 연결을 요청한 데이터베이스를 엽니 다. 이 시점에서 데이터베이스 수준 사용자를 서버 수준 로그인에 매핑하거나 데이터베이스를 사용하기에 충분한 권한이 본질적으로있는 서버 수준 로그인을 사용해야합니다.

이 사용하는 SQL Server 인증 증명하는 간단한 (하지만 안전하지) 방법 :

objConn.ConnectionString = "공급자 = SQLNCLI : 당신의 ASP 연결 문자열, 사용 지금

USE master; 
GO 
CREATE LOGIN foo 
    WITH PASSWORD = 'bar', CHECK_POLICY = OFF; 
GO 
USE BRD; 
GO 
CREATE USER foo FROM LOGIN foo; 
GO 
EXEC sp_addrolemember N'db_owner', N'foo'; 
GO 

을 데이터 원본 = XPSI7 \ SQLEXPRESS, 초기 카탈로그 = BRD, 사용자 ID = foo, 암호 = 막대; "

간단하고 당신이 데이터베이스 사용자에게 사용하고 로그인 어떤 또한 매핑 할 수

: 그들에게 데이터베이스에 대한 액세스 권한을 부여하지만, 그것은 어떤 권한을 결정하는 당신에게 달려있을 것이다

USE BRD; 
GO 
CREATE USER [YourDomain\IIS_IUSRwhatever] 
    FROM LOGIN [YourDomain\IIS_IUSRwhatever]; 
GO 

교부금. 이것은 웹 서버에 대한 익명 액세스를 허용한다고 가정합니다. IIS가 도전하고 Windows 인증을 수락하는 경우 자격 증명을 제출할 사용자에게 위와 같은 조치를 취해야합니다. 두 경우 모두 지금 연결 문자열을 계속 사용할 수 있어야합니다. 는 BRD 데이터베이스에 대한 보안 탭 아래에 나열됩니다 -

strConnection = "Provider=SQLNCLI10;Server=server_name;Database=" & BD_REMOTE_INITIAL_CATALOG & ";Uid=" & BD_REMOTE_USER_ID & "; Pwd=*****;" 
+0

아론 감사합니다. 귀하의 대답은 간결하고 이해하기 쉽고 정확했습니다. 당신은 이것이 매우 안전하지 않다는 것을 언급합니다. 임베디드 사용자 ID 및 비밀번호 접근 방식을 피하고 connectionString에서 Integrated Security = SSPI를 사용하려면 더 많은 작업이 얼마나 필요합니까? –

+0

안전하지 못한 부분은 앱 사용자에게 db_owner를 부여하는 것과 관련이 있습니다. 일반적으로 SQL 인증 또는 Windows 인증 사용자에게는 그렇게 많은 것을주지 않을 것입니다. IIS 계정을 사용하고 있다면 Windows 인증을 사용할 이유가 없습니다. SQL 인증 계정을 사용하면 동일한 사용자로 쉽게 연결하고 디버깅 할 수 있다는 장점이 있습니다. 실제로 웹 사이트를 통해 인증하고 Windows 자격 증명을 전달할 경우 Windows 인증을 사용할 것입니다. 여기 플러스 측면은 누가 무엇을하고 있는지 추적하는 것이 더 쉽습니다. 하지만 개별 로그인/사용자를 설정하거나 Windows 그룹을 사용해야합니다. –

+0

Very good. 다시 감사합니다. –

0

는 다음 연결 문자열을 시도? 분명히 그것은 유효한 로그인이지만 BRD 데이터베이스와 관련이없는 것처럼 보입니다 ... 목록이 유효한 로그인에 연결되어있는 한 데이터베이스 권한 문제입니다.