2013-10-14 4 views
0

현재 테이블에 대한 사용 권한을 확인해야하는 vb.net 프로그램을 만들고 있습니다 (테이블이 제외 된 경우 데이터베이스에 대한 사용 권한이없는 경우 데이터베이스가 제외 된 경우 사용 권한 SQL 서버에)테이블에 대한 사용 권한 확인

거기 thouse 권한을 확인하는 방법이며, 어떻게?

  • 어떻게 사용자 "testuser를"내가 사용자 "testuser를"에 대한 데이터베이스 "TESTDB"에 대한 권한을 확인 어떻게
  • 은 "testdb.testtable"테이블에 대한 사용 권한을 확인합니까
  • 어떻게 내가 구글에서 검색했습니다 사용자 "testuser를"에 대한 서버

에 대한 권한을 확인,하지만 내가 가진 결과는 2 페이지 긴 SQL 스크립트이었다.

+0

으로, 나를 위해 일한 발견? 권한이없는 경우 특정 작업을 수행해야합니까? 만약 당신이해야 할 일은 적절한 오류를 표시 한 다음,'testdb.testtable' 테이블로해야 할 일을하려고하면 SQL은 오류를 던지고 정확한 오류 메시지와 오류 번호를 문제가있는 상태에서 전환 할 수 있습니다. –

+0

제 아이디어는 테이블이 존재하는지 확인하는 것이 었습니다. 그렇다면 INSERT 권한이있어서 새 행을 삽입하기 시작했습니다. 그러나 테이블이 제외 된 경우 사용자가 데이터베이스를 변경할 수있는 권한이 있으면 테이블을 만듭니다. 데이터베이스가 exsist되지 않은 경우 새 데이터베이스를 만들 수있는 권한이 있으면 데이터베이스를 만듭니다. 이것은 데이터 손실을 막기 위해 데이터를 게시하기 전에 초기 시도로 이것을 추가하는 것이 었습니다. – Droa

답변

1

저는 최종 사용자에게 데이터베이스를 생성 할 책임이 있습니다. 사용자가 해당 데이터베이스를 지정할 수 있도록합니다. 설치 프로그램이 데이터베이스를 작성하는 것이 올 Y 르지 만 최종 사용자가 이름을 제공 한 곳에서 이미 작성된 것을 승인해야합니다. 최종 사용자가 이미 그 이름으로 생성 된 데이터베이스를 가지고있는 것처럼 데이터베이스 이름을 추측하고 싶지 않으면, 직접 충돌하게됩니다.

즉, 사용 권한은이 데이터베이스에서 사용자의 사용 권한을 설명하는 sys.database_permissions에 저장되고 sys.server_permissions은 데이터베이스를 만들 수 있는지 확인합니다.

SQL 서버 권한을 조회 래핑하는 기능이 유용하게하지만 - 예를 들어, HAS_PERMS_BY_NAME 기능이 여기에 편리를 :

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE') 

... 현재 사용자가있는 능력이 있는지 볼 것이다

SELECT HAS_PERMS_BY_NAME(null, null, 'CREATE ANY DATABASE') 

...는 현재 사용자가 데이터베이스를 만들 수 있는지 알려 줄 것입니다. 권한의 이름은 GRANT으로 전달됩니다. 자세한 정보와 예제는 문서를 참조하십시오.

+0

이것은 제가 결론을 내린 것과 같습니다. 그 이유는 데이터베이스 사용자의 권한을 로그 할 필요가 있기 때문입니다. Windows 서비스를 만들었고, 실패한 경우 최종 사용자는 불만을 없애기 위해 whent가 잘못된 점을 자세히 알아야합니다. 사례에 감사드립니다. – Droa

0

다른 SQL 쿼리를 어셈블 할 수도있었습니다. 그러나 사용자가 데이터베이스에 액세스 할 수없는 경우 오류가 반환됩니다. "ReplaceWithNameOfDatabase을 사용하여"

쿼리를 추가하여

SELECT pe.*,object_name(pe.major_id), pr1.name as Grantee, pr2.name as Grantor, pr1.create_date,pr1.default_schema_name from sys.database_permissions as pe 
join sys.database_principals as pr1 on pe.grantee_principal_id = pr1.principal_id 
join sys.database_principals as pr2 on pe.grantor_principal_id = pr2.principal_id 
where pr1.name = CURRENT_USER 
go 

는 데이터베이스에 대해 최대 요청합니다.

이전에는 MSSQL을 사용 해보지 않았지만 MYSQL 만 사용한 적이 있습니다. userlogin 데이터가 저장되는 방식에는 큰 차이가 있습니다.

내가이 SQL Server: Permissions on table 내가 여기에 또 다른 질문은 "왜"생각 좀 수정

관련 문제