2010-02-11 4 views
11

System.Data.SqlClient를 사용하여 SQL Server 2005 Express 데이터베이스에 연결해야하는 C#으로 Windows 서비스를 프로그래밍했습니다.windows-service에서 windows 인증을 사용하여 sql-server에 연결하는 방법은 무엇입니까?

Microsoft는 SQL 인증보다 Windows 인증을 선호하기 때문에 Trusted Conenction/Integrated Security를 ​​사용하여 DB에 연결하려고했습니다.

그러나 System.Data.SqlClient.SqlException이 발생하면 작동하지 않습니다. 'NT AUTHORITY \ LOCAL SERVICE'사용자가 로그인하지 못했습니다.

다른 Windows 계정으로 로그인 할 수 있습니까?

답변

13

현재 서비스는 현재 LocalService Account으로 실행되며이 서비스 계정은 현재 SQL에서 승인되지 않았습니다.

상황은 다음 두 가지 방법 중 하나로 해결할 수 있습니다. SQL에서 권한이 부여 된 계정으로 계정을 실행하거나 SQL에서 LocalService 계정을 로그인으로 추가하십시오. 구체적으로 :

  • 서비스 관리 콘솔에서 서비스가 실행되는 계정을 변경하십시오. (예 : 컴퓨터 관리 | 서비스 및 응용 프로그램 | 서비스) 문제의 서비스에서 "등록 정보"를 오른쪽 마우스 버튼으로 클릭하십시오.
  • 또는 "Microsoft SQL Management Studio"에서 LSA 계정을 로그인으로 추가하고이 새 보안 주체를 설정하십시오 (로그인)하여 원하는 데이터베이스 오브젝트에 액세스 할 수 있습니다.

편집 다음 LocalService를 계정이 pervasively SQL 노출 될 수 그것을 SQL에 대한 액세스 권한을 부여하는 시스템에서 찾을 수 있도록하고 데이터베이스가 특정 서비스 또는 드라이버가 손상 될 사용 때문에 첫 번째 방법은, 아마도 바람직하다 .
대신 특정 계정을 도입함으로써 SQL 객체에 액세스하는 사람과 방법을보다 잘 제어 할 수 있습니다. 물론 이러한 계정을 구성해야하는 권한 (권한이 부여되지 않은 권한)은 SQL이 아닌 시스템 수준에서 발생하며 기본 서비스의 기능에 따라이 계정을 만들어야 할 수도 있습니다 오히려 강력하기 때문에 다른 방법으로 잠재적 인 책임이 있습니다. ...

+0

. 서비스에 대한 사용자 변경 좋은 소리. 그러나 어떻게 그것이 프로그래밍 적으로 행해질 수 있습니까? 서비스 관리 콘솔이 아닌 내 C# programm에서이 작업을 수행하려고합니다. –

+0

@ räph : ADSI API를 살펴 보았을 때 나는 "계정을 엉망으로 만들 수 있어야합니다." .NET System.ServiceProcess.ServiceController 클래스. 서비스를 시작/중지하는 데이 도구를 사용하지만이 방식으로 서비스 설정을 변경 한 적이 없습니다. 필자가 보았던 다른 접근 방법은 net 명령을 생성하는 것입니다 (비록 서비스 변경이 가능할 것이라고는 생각하지 않지만). 그리고 최근에는 PowerShell을 사용하여 서비스 속성을 변경할 수 있습니다.). – mjv

+1

LSA는 LocalService가 아닌 * Local Security Authorithy *를 나타냅니다. http://msdn.microsoft.com/en-us/library/ms721592%28VS.85%29.aspx#_security_local_security_authority_gly#_security_local_security_authority_gly –

1

SQL Express에서 LOCAL SERVICE 계정에 대한 액세스 권한을 부여해야합니다. 내 의견에 따라, 내 충고에 따라 서비스를 실행할 수있는 새 계정을 만든 다음 SQL Express 내에서 관련 권한을 추가해야합니다. 즉, LOCAL SERVICE에서 서비스를 실행하지 마십시오.

+1

나는 그것에 대해 생각했지만 모든 서비스가 내 DB에 액세스하지 못하겠습니까? –

+0

해당 계정으로 실행되는 모든 서비스는 예입니다. 별도의 계정을 만들어 필요한 권한 만 지정해야합니다. 덕분에 – James

2

신뢰할 수있는 Windows 인증을 사용하려는 경우 가장 쉬운 방법은 SQL Server 데이터베이스에 대한 사용 권한이있는 도메인 계정 (최소한 privilleges가 필요한 경우)을 사용하여 서비스를 실행하는 것입니다.

3

서비스 제어 관리자가 Windows 서비스를 시작하면 프로세스는 OS에서 실행중인 다른 프로세스와 마찬가지로 특정 사용자로 실행됩니다.

Windows 서비스를 실행하는 데 사용되는 "기본 제공"사용자 계정이 많이 있습니다. 컴퓨터 관리에서 "서비스"노드를 보면 Windows 서비스의 전체 집합과 실행되는 계정 (Windows 7에서 "로그온"이라고 함)을 볼 수 있습니다.(가) "로 로그온"으로

1) 내장 된 계정 중 하나를 지정 : 우리가 Windows 서비스는 우리가 아래의 두 번째 접근법을 통합 보안을 사용하여 DB 얘기하고 싶지 내 경험에서

계정을 만들고이 계정을 적절한 DB 권한이있는 SQL Server 인스턴스의 로그인으로 추가하십시오.

2) Windows 서비스에 사용할 로컬 또는 도메인 계정을 사용/생성하여이 계정을 적절한 DB 사용 권한. 설치 프로그램을 통해 서비스를 설치하는 동안 사용자 계정 자격 증명을 요구하는 것이 가능합니다.

그러나 나는 다음과 같은 고려 가치, 각 방법의 모든 장점과 단점을 지적 할 정도로 전문가가 주장 할 수 없습니다 : 선택한으로 실행 방법 1

  • 모든 서비스와 프로세스를 기본 제공 계정에는 데이터베이스 액세스 권한이 있습니다.

  • 접근 방식 1에서는 암호 설정이 시스템 자체에서 관리되지만 접근 방식 2에서는 관리자가 암호를 관리 할 수 ​​있으며 필요한 보안 정책을 준수 할 수 있습니다.

난 당신이 데이터베이스에 로컬 서비스 계정 액세스 권한을 부여하거나 서비스를 실행하는 다른 계정을 사용하거나 필요 MJV 말했듯이

1

도움이되기를 바랍니다. 프로그래밍 방식으로 계정을 변경하는 방법을 물었습니다. 서비스를위한 Installer를 만들고 Account 속성을 "User"로 변경 한 다음 Username과 Password를 지정하여 서비스를 실행합니다. 당신이 아래로 스크롤하면

다음 링크는 설치 프로그램을 만드는 방법에 대한 정보가 포함

http://msdn.microsoft.com/en-us/library/aa984464(VS.71).aspx

다음은 계정 속성에 대한 좀 더 자세하게 제공하는 반면 :

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceprocessinstaller.account(VS.71).aspx

희망이 도움이됩니다.

관련 문제