당신은 뭔가를 놓쳤습니다 - 대단히 생각합니다 : 합리적인 시스템 설계. ;) 데이터베이스 자격 증명을 사용하여 사용자를 관리한다는 아이디어는 데이터베이스를 관리하는 하나의 유스 케이스에 유용합니다. 그 밖의 모든 것, 그것은 좋은 것보다 많은 문제를 부과합니다. 그래서 똥 스톰이 시작됩니다 ...;)
BOT : 딜레마가 있습니다. 기본적으로 각 사용자에 대한 연결 풀을 작성해야합니다. 그렇지 않으면 데이터 소스가 연결 시간 초과로 실행될 때마다 데이터베이스에 대한 연결을 작성해야하기 때문입니다. 세 방향 핸드 쉐이크와 인증은 싼 것은 아닙니다. 대기 시간이 귀하의 성과를 저해 할 수 있습니다. 일부 드라이버는 그에 따라 구성 할 수 있지만 일반적으로 나쁜 아이디어이며 대부분의 드라이버는 "분리의 문제"때문에 연결 자체를 관리하지 못합니다. 다른 한편, 각 사용자가 자신이 여러 작업을 동시에 수행 할 가능성이 거의 없으므로 각 연결 "풀"에는 약 5 개의 연결 만 있으면됩니다.
참고 : 연결 및 풀을 관리하는 유일한 드라이버는 MongoDB의 드라이버입니다.
이제 여기에 문제가 있습니다. 세션에 연결 풀을 연결할 수 없습니다. 꽤 많은 마일을 걷지 않고, 나는 그것이 전부 가능하다는 것을 의심합니다.
이 문제를 해결하려면 사용자가 로그인하여 JNDI를 사용하여 동적으로 등록 할 때 연결 풀을 만드는 것이 좋습니다. 문제는 이것이 매우 확장 성이 없다는 것입니다 (수백 명의 사용자가 있다고 가정). 따라서 세션이 종료되면 (로그 아웃 또는 시간 초과로) 풀이 제거되었는지 확인해야합니다. 또한 코드를 유지 관리해야합니다.
또 다른 아이디어는 Apache Shiro을 사용하고 자격 증명을 확인하기 위해 데이터베이스에 로그인하려고하는 사용자 지정 영역을 작성하여 실패 할 경우 AuthenticationExcepion을 던집니다. 여기에 걸 맞는 절충점은 매번 연결을 초기화해야한다는 것입니다. 영역에서는 응용 프로그램 전체 연결 풀을 사용하고 인증 및 권한 부여 데이터에 대해 데이터베이스 메타 데이터를 검사 할 수도 있습니다. 물론 그것은 특권을 가진 사용자로서 데이터베이스에 액세스하는 것이 필요합니다. 이것은 끔찍한 생각입니다.
결론 : 어떤 방식으로 보더라도 응용 프로그램의 인증 및 권한 부여 요구 사항을 데이터베이스를 통해 관리하면 응용 프로그램의 인증 및 권한 부여 계층이 제거 될 수 있지만 추가로 추상화 계층이 필요합니다. 일부 데이터베이스 메커니즘이 변경되는 경우 서비스의 코드를 변경하고 싶습니까?), 코드를 한 데이터베이스로보고 묶을 때 확장 성 문제를 부과합니다 (물론 세분화 된 사용 권한은 원하지 않고 "효과가 없다"결과).
['DataSource.getConnection (username, password)'] (http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html)에서 얻은 연결을 확인하는 것이 좋습니다. # getConnection-java.lang.String-java.lang.String-)은 전혀 풀링되지 않습니다. –