2011-08-03 4 views
0

MSSQL 2008 R2를 사용 중입니다. 특정 데이터베이스를 복원 할 때 SQL Management Studio의 모든 사용자가 액세스 할 수 있습니다. 아래 SQL 문을 사용하여 공용 서버 역할에이 데이터베이스에 대한 연결 권한이 부여되어 있음을 확인했습니다.공용 역할의 연결 권한 철회

0 DATABASE 0 0 2 1 CO CONNECT G GRANT

아래 인이 쿼리의 결과로

use db_mydb 
SELECT * 
    FROM sys.database_permissions 
WHERE grantee_principal_id = (SELECT principal_id 
           FROM sys.server_principals 
           WHERE name ='public') 

모든 작업이 권한을 취소 주위에 있습니까? 올바른 방법

답변

0

이에 대한 나의 해결책이었다 사이에는 공통 열이 없습니다 빈 데이터베이스를 만듭니다. 그런 다음 스크립트 생성을 사용하여 테이블, 뷰 및 저장된 procuders를 스크립팅합니다. 그런 다음 데이터 가져 오기 옵션을 사용하여 데이터를 가져옵니다. 이 모든 작업은 Micosoft SQL Management Studio를 사용하여 수행 할 수 있습니다.

+0

즉, 두 서버 모두에서 일부 로그인 *이 설정되었으며 사용자도 존재했음을 의미합니다. 따라서 복원시 보안이 자동으로 부여됩니다. 내가 언급했듯이 대중과 아무 관련이 없습니다. 2 sys.xxx_principals보기에서 sid 열을 사용하여 찾을 수 있습니다 – gbn

+0

데이터베이스에 사용자가 없습니다 –

0

하나는 데이터베이스

  • 실행의 모든 ​​사용자가 해당 사용자에 연결을 부정하는

    • 실행 DROP 사용자

    공공

    하지 엉망를 수행 할 것 코드가 사용자를 오도합니다.

      (210)
    • 서버 수준 public 역할은 데이터베이스 수준
    • sys.database_permissions.grantee_principal_id 역할에 대한 sys.database_principals
    • 을 의미 public 역할 관련이없는, sys.database_permissions/sys.database_principalssys.server_principals
  • +0

    게시물을 보내 주셔서 감사합니다. 문제는이 특정 데이터베이스에 액세스 한 사용자가 없지만 액세스 할 수 있다는 것입니다. 따라서 나는 같은 것을 할 수 없다. 'use db_test; TestUser에 연결을 거부하십시오. ' 실제로 내 코드로 오도 된 것입니다. 수있는 더 많은 모습이 있어야한다고 생각하십시오 'use db_test; select * from sys.database_permissions 여기서 grantee_principal_id = (sys.database_principals에서 name = 'public')의 SELECT principal_id를 선택하십시오.; –

    +0

    public 역할을 망치려고하지 않습니다. 절대로 SQL 2000에서 SQL 2008로 마이그레이션하기 전에 이미 수정 된 것으로 보이며 여기에서 "기본"사용 권한을 복원하려고합니다. –

    +0

    "기본"권한이 없습니다. 연결하는 사용자는 sysadmin이거나 이미 액세스 권한이 있어야합니다 (예 : 그룹/로그인이 이전 서버와 새 서버에 있음). – gbn

    관련 문제