카우치베이스 서버 5.0 는 훌륭한 새로운 인증 기능 클라이언트 연결 코드에 약간의 변경이 필요합니다. SDK의 구체적인 변경 사항은 이 게시물에 설명되어 있으며 사전 릴리스에서 변경된 사항도 참조하세요. 4월 개발자 빌드 및 곧 출시될 베타 버전에 대해 자세히 알아보세요.
Matthew의 역할 기반 액세스 제어 소개를 참조하세요: 1부 & 파트 2
간단히 말해, 버킷 기반 비밀번호(및 비밀번호 없는 버킷)는 이제 과거의 일이 되었습니다. 대신 버킷, 데이터 및 모든 서비스에 대한 세분화된 역할 수준의 액세스 제어를 제공합니다. 이제 특정 역할과 액세스 권한을 가진 사용자를 만든 다음 클라이언트에서 해당 사용자(비밀번호 사용)로 연결할 수 있습니다.
이 글에서는 이러한 새로운 기능을 사용하는 세 가지 구체적인 패턴을 살펴보고 각 옵션에 대해 설명합니다.
이는 사전 프로덕션 서버 코드를 기반으로 하므로 예제가 변경될 수 있습니다. 또한 최신 SDK 라이브러리 귀하의 언어에 대해 작성 시 지원되는 것은 다음과 같습니다. Java, .NET, Node.js, PHP, Python, Go 그리고 C.
사용자 이름 지정 버킷
사용자 이름이 없는 버킷에 기본 URI 연결 문자열을 계속 사용하는 경우 클라이언트는 이제 몇 가지 가정을 하게 됩니다.
먼저, 다음이 있다고 가정합니다. 버킷과 이름이 같은 사용자. 이전 버전에서 마이그레이션하는 사용자는 다음과 같은 작업만 수행하면 되므로 유용합니다. 비밀번호 제공 를 이 Python 예시와 같이 연결 문자열로 대체할 수 있습니다:
1 |
>>> db = 버킷("couchbase://localhost/tyler",비밀번호="tyler123") |
(이 간소화된 사용법은 Python, PHP 및 C 라이브러리로 제한됩니다.)
위의 내용은 다음과 같이 가정합니다. 버킷 명명된 타일러 뿐만 아니라 사용자 명명된 타일러 버킷 액세스 역할이 활성화된 사람입니다.
비밀번호 없는 버킷 는 더 이상 허용되지 않지만 마이그레이션된 버킷은 한 가지 예외가 있습니다. 비밀번호 없이 새 사용자를 만드는 것은 불가능하지만 마이그레이션 프로세스를 통해 이전에는 비밀번호가 없었던 버킷에 대해 비밀번호 없이 사용자가 만들어집니다.
위와 같이 사용자는 버킷과 이름이 같고 비밀번호가 없습니다. 이 경우 연결 문자열과 함께 빈 비밀번호 문자열을 전달할 수 있습니다.
마이그레이션 후에는 새 버킷과 사용자에게 모두 비밀번호가 필요하므로 지금이 앞으로의 접근 방식을 변경하기에 좋은 시기입니다.
버킷 이름으로 사용자 아이디와 비밀번호 전달하기
앞으로의 새로운 인증 패러다임에서는 인증된 연결을 관리하는 두 가지 방법이 있습니다. 가장 간단한 방법은 사용자 이름과 비밀번호를 모두 포함하도록 연결 매개변수를 조정하는 것으로, 이는 Python에서 쉽게 수행할 수 있습니다:
1 |
>>> db = 버킷("couchbase://localhost/travel-sample", 사용자 이름="tyler", 비밀번호="tyler123") |
그러나 이것은 매우 단순한 접근 방식입니다. 더 강력한 옵션이 있습니다. 새로운 인증자 클래스 를 사용하여 잠재적으로 여러 버킷에 대한 인증을 관리할 수 있습니다.
사용자 및 버킷 처리를 위한 인증자 클래스
인증을 처리하는 "적절한" 방법은 버킷 URI에서 인증을 완전히 분리한 후 필요할 때 클러스터 연결로 전달하는 것입니다.
여기서 인증자 초기화는 주어진 클러스터를 가져와서 이에 대해 인증합니다. 이 예제에서는 여러 언어의 패턴이 동일하다는 것을 알 수 있습니다. 그런 다음 원하는 대로 인증자를 다른 클러스터로 전달할 수 있습니다.
Python
1 2 3 4 5 6 7 8 |
에서 카우치베이스.클러스터 가져오기 클러스터 에서 카우치베이스.클러스터 가져오기 비밀번호 인증기 클러스터 = 클러스터('couchbase://localhost') 인증자 = 비밀번호 인증기('username', 'password') 클러스터.인증(인증자) 버킷 = 클러스터.open_bucket('버킷 이름') |
Java
1 2 3 |
클러스터 클러스터 = 카우치베이스클러스터.create(); 클러스터.인증("username", "비밀번호"); 버킷 버킷 = 클러스터.오픈버킷("버킷 이름"); |
.NET
1 2 3 4 5 |
var 클러스터 = new 클러스터(new 클라이언트 구성 { 서버 = new 목록<Uri> { new Uri("http://localhost") }}); var 인증자 = new 비밀번호 인증기("username", "비밀번호"); 클러스터.인증(인증자); var 버킷 = 클러스터.OpenBucket("버킷 이름"); |
PHP
1 2 3 4 5 |
1TP4인증자 = new \카우치베이스\비밀번호 인증기(); 1TP4인증자->사용자 이름('username')->비밀번호('password'); $클러스터 = new \카우치베이스\클러스터('couchbase://localhost'); $클러스터->인증(1TP4인증자); |
Node.js
1 2 3 4 |
var 카우치베이스 = require('couchbase'); var 클러스터 = new 카우치베이스.클러스터('couchbase://localhost/'); 클러스터.인증('username', 'password'); var 버킷 = 클러스터.오픈버킷('버킷 이름'); |
다음 단계
애플리케이션의 주요 디자인 변경 사항은 버킷별 비밀번호를 사용하지 않는 것입니다. 대신 특정 버킷에 액세스할 수 있는 적절한 역할을 가진 사용자가 있어야 합니다.
몇 줄의 코드만 변경하면 Couchbase Server 5.0의 역할 기반 액세스 제어 기능을 쉽게 활용할 수 있습니다.
로 업그레이드 최신 개발자 빌드 를 클릭하고 클라이언트 라이브러리를 업그레이드하여 사용해 보세요.
참여하기 포럼 질문이 있으신가요?
[…] https://www.couchbase.com/new-sdk-authentication/ […]
SSL 연결을 설정해야 합니다. 새 SDK에서 인증 경로를 어떻게 지정하나요? 특히 저는 파이썬을 사용하고 있습니다. 과거에는 다음과 같은 작업을 수행했습니다:
db = Bucket("couchbase://localhost/tyler?certpath=/etc/ca-bundle.crt",password="tyler123″)
안녕하세요, 읽어주셔서 감사합니다! 평소와 같은 방법으로 "couchbases://" 끝에 "s"가 있는지 확인하세요... 다시 막히면 알려주세요.
안녕하세요 타일러,
제 질문은 구체적으로 인증서 경로 파일을 지정하는 방법과 위치를 명확히 했어야 했나요? 자체 서명된 인증서를 사용하는데 이를 지정하지 않으면 "RC=0x37[클라이언트가 서버의 인증서를 확인할 수 없음]"이라는 메시지가 표시됩니다.
과거에는 인증 경로가 연결 문자열에 URL 스타일 매개 변수로 전달되었습니다. 새 SDK에서 이를 어떻게 지정해야 하는지 잘 모르겠습니다.