2010-05-10 3 views
1

현재 사용자를 정의 할 수 있습니까?현재 사용자를 정의하는 방법은 무엇입니까?

저장 프로 시저 'sp_mgGetConnectedUsers'가 있습니다. 유일한 필드 'Address'로 결과 세트를 리턴합니다. 그러한 '주소'와 실행중인 쿼리를 어떻게 연관시킬 수 있습니까?

상담하십시오.

참고 : 내가 이해하는 한 현재 사용자를 얻는 또 다른 방법은 각 연결마다 고유 한 응용 프로그램 ID를 설정하는 것이지만이 방법은별로 좋아하지 않습니다.

+0

sp_GetSQLStatements는 일반 출력의 일부로 사용자 이름 (SQL 문과 함께)을 반환합니다. 그것은 당신이 찾고있는 것입니까? 그것은 당신이 sp_mgGetConnectedUsers()에서 UserName에 상관 관계가있을 것 같습니다. –

+0

이것이 JD가 제안한 바입니다. 나는 장님이다. –

답변

3

당신은 사용자 라 함수 사용할 수있는 데이터 사전 사용하는 경우 :

select user() from system.iota; 

을하고 DictionaryUser 필드와 그 상관 관계를하는 sp_mgGetConnectedUsers에서 돌아왔다.

사전을 사용하지 않는 것이 가장 쉬운 방법은 sp_SetApplicationID 및 sp_GetApplicationID를 사용하는 것입니다. 왜 그렇게 생각하지 않아? 최종 목표가 무엇인지 알면 도움을주기가 더 쉽습니다. 쿼리와 연결된 사용자를 보려면 sp_GetSQLStatements 프로 시저를 실행하십시오.

+0

네, 맞습니다. Jeremy. 내 설명은 설명이 아니 었습니다. 미안 해요. 내가 필요한 모든 것은 내 SP에 누가 전화했는지 알려주는 것입니다. 그리고 다른 행동이 있어야 사용자에 달려있다. 따라서 스칼라 함수 USER()를 사용하는 솔루션은 내가 필요한 것입니다. 감사합니다. –

2

현재 사용자에 대해 여러 가지 생각할 수 있습니다. Advantage 사용 방법에 따라 다릅니다. - 컴퓨터 이름
사전 사용자 - IP, IPX 또는 IPC 주소
OSUserLoginName - - 광고 사전에
주소를 로그인하는 데 사용되는 사용자 클라이언트 OS 로그인 이름

사용자 이름 :

sp_mgGetConnectedUsers 출력은 다음을 제공합니다 TS 주소 - 클라이언트 주소
작은 애플리케이션의 최종 사용자의 IP 주소 - 고유 setable ID 기본 = EXE 이름

당신이 Dictiona를 사용하는 경우 각 사용자가 사전을 고유 이름으로 연결하면 사전 사용자가 갈 수 있습니다 ("select user() from system.iota"(또는) SQL 스크립트 등으로도 얻을 수 있습니다). 주소 및 사용자 이름은 사용자의 IP 주소 및 사용자의 컴퓨터 이름입니다. 이렇게하면 사용자를 고유하게 식별하는 데 도움이됩니다. 사용자가 터미널 서버를 통해 들어오는 경우 TS 주소를 사용하여 OSUserLoginName과 함께 사용자를 식별 할 수 있습니다. 이 솔루션에 신경 쓰지 않는다고 특별히 명시 했으므로 ApplicationID에 대해서는 자세히 설명하지 않겠습니다. 하지만 ... 원하는 항목으로 설정할 수 있지만 기본값은 응용 프로그램 (예 : ARC.exe)의 이름입니다.

질문의 B 부분은 검색어를 연결하는 방법입니다. sp_getsqlstatements 프로시 저는 현재 활성 쿼리를 반환하거나 ARC에서 원격 서버 정보를 사용할 수 있습니다. 이렇게하면 sp_mgGetConnectedUsers의 UserName과 동일한 연결 이름이 반환됩니다. 이 조합을 사용하여 컴퓨터 이름, IP 주소 (또는 터미널 추가 도구), 사전 사용자 이름, 클라이언트 OS 로그인 이름 및 응용 프로그램 이름을 알 수 있습니다.