2014-04-21 2 views
3

사용자 이름과 암호로 인증해야하는 서비스에 대한 형식 공급자를 만들었습니다. 입력 된 인스턴스를 생성하기위한 서명이 같은 것입니다 : 그것은 모두 잘 작동사용자 이름 및 암호 매개 변수를 형식 공급자에게 전달

let tbl = new DemoTable<TableId="demo",User="user",Password="password">() 

, 유일한 문제는 내가이 코드를 설명 할 것입니다, 그래서 사용자 이름과에서 온 암호를하고 싶습니다 다른 소스 - 설정 파일, 다른 F # 모듈 (스크립팅을 사용할 때 좋은 접근법) 등 데모 중에 이러한 매개 변수를 전달할 수있는 옵션은 무엇입니까?

답변

4

하나의 간단한 방법은 당신이 표시되지 않는 파일의 리터럴을 사용하는 것입니다

let tbl = new DemoTable<TableId="demo",User=MyInfo.user,Password=MyInfo.pwd>() 
+0

+1 이것은 멋진 트릭입니다! 나는 이것과 설정 파일을 사용하는 것의 가장 큰 차이점은 설정 파일을 사용한다면 이름과 암호가 실제로 컴파일 된 바이너리에 있다는 것이다. 일부 배포 시나리오에서는 문제가 될 수 있지만 스크립팅의 경우에는 그렇지 않을 수 있습니다. –

0

데이터베이스의 비밀번호를 변경 (또는 임시 사용자 만들기) -> 프로젝트 컴파일 -> 비밀번호 변경 (또는 사용자 삭제).

4

정적 매개 변수로 직접 사용자 이름과 암호를 지정하면 대화 형 스크립팅 시나리오에서 유용합니다. 그러나 당신이 말한 것처럼 때로는 그것들을 별도의 설정 파일에 보관하는 것도 유용합니다. F #에는이 작업을 쉽게하는 라이브러리가 없지만 두 가지 옵션을 모두 제공하는 SqlDataConnection 유형 공급자와 같은 패턴을 구현할 수 있습니다 (MSDN docs 참조).

할 수 있습니다 중 전체 연결 문자열 지정

type DB = SqlDataConnection<ConnectionString="Source=.; User=me; Password=mysecret"> 

또는 로컬 설정 파일 및 키 이름을 지정할 수 있습니다을 :

type DB = SqlDataConnection<ConnectionStringName="LocalDb", ConfigFile="App.config"> 

이것은 당신이 구현해야 할 것 무언가 당신의 유형 공급자가 있지만 두 시나리오를 모두 지원하는 가장 좋은 방법 인 것 같습니다. 당신이 쇼를 할 파일의

module MyInfo = 
    [<Literal>] 
    let user = "user name here" 

    [<Literal>] 
    let pwd = "password here" 

그리고 :

+0

을 내가 사용하는 경우 연결 문자열 패턴 , 나는 아직도 나의 비밀 번호를 드러낸다. SqlDataConnection ()을 쓸 수 있습니다 ... 구성이 이상적이지 않습니다. 스크립팅을 사용하는 경우 구성이 없습니다. –

+1

스크립트 시나리오에서 구성 파일을 계속 사용할 수 있습니다. 표준 SQL 유형 공급자는 스크립트 파일이있는 폴더에서 지정된 이름의 구성 파일을 찾습니다. 당신은 당신의 타입 제공자를 위해서도 똑같이 할 수 있습니다. (하지만 여전히 설정 파일이 있어야하므로 암호가 여전히 어딘가에 저장됩니다.) –

관련 문제