2014-12-16 1 views
2

나는 4 개의 열이있는 SQL Server 테이블을 가지고 있는데, 그 중 하나는 기본값이 getdate() 인 datetime 열입니다. 나는이 테이블의 복사본을 두 개 가지고있다. 하나는 개발 데이터베이스 서버에 있고, 다른 하나는 권한이 거의없는 프로덕션 데이터베이스 서버에있다. 여기SQL Server 열이 작동하더라도 기본값이없는 것으로 나타나는 이유는 무엇입니까?

은 개발 테이블 모습입니다 :

enter image description here

나는 dtInsert 열을 선택했습니다. 이 열의 기본값은 getdate()입니다. 이 표의 제작 버전은 완전히 동일합니다. 이 테이블에 행을 추가하면 dtInsert 셀의 기본값은 getdate()입니다. 데이터베이스 관리자가 프로덕션 테이블의 스크립트를 생성하면 디폴트 값 제한 조건이 포함됩니다. 그러나 SQL Server Management Studio 2012에서 테이블 디자인을 볼 때이 열은 기본값이없는 것으로 표시됩니다. 여기를 참조하십시오 :

enter image description here

나는 데이터베이스 다이어그램을 생성, 또한 기본값이없는 것처럼 dtInsert 열을 보여줍니다. 다시 말하지만 실제로 프로덕션 데이터베이스 서버의 dtinsert 열의 기본값은 getdate()입니다.

SQL Server Management Studio 버전 2012에서이 버그가 있습니까? 이 행동에 대해 어떤 권한이 있습니까? 다른 것입니까? 왜 열에도 기본값이없는 것처럼 보이는 이유는 무엇입니까?

+0

내 생각 엔 사용 권한 문제인데 확실하지 않은 사용 권한입니다. 나의 google-fu는 지금 충분히 강하지 않다. – Kritner

+0

기본값을 확인하려면 개체에 대한 DDL 권한이 필요하다고 생각합니다. db_owner 또는 db_ddladmin이 수행합니다. –

+1

열은 볼 수 있지만 구속 조건은 볼 수 없다는 것이 이상하게 보입니까? 이것을보십시오 :'SELECT * FROM sys.default_constraints WHERE [parent_object_id] = OBJECT_ID (N'_table_name _ ');'두 환경 모두에서 diff가 있는지 확인하십시오. 그것이 prod에 DEFAULT를 반환하면 SSMS에 문제가 될 수 있습니다. 행이 없다면 권한이다. 대부분 VIEW DEFINITION이다. –

답변

5

SQL Server Management Studio 버전 2012의 버그입니까? 나는이 문제에 대해 제공되는하지 않는 일부 권한은

번호

있습니까?

예. 나는 다음과 같은 실행 제안 질문에 단 댓글에서

:

SELECT * 
FROM sys.default_constraints 
WHERE [parent_object_id] = OBJECT_ID(N'_table_name_'); 

결과는 [definition] 열이 NULL이었다 생산의 행 반환했다.이것은 DEFAULT 제약 조건이 있음을 의미하지만 당신은 다음 중 하나

  • 부족 명시 적 및 암시 적 권한을 명시하고 그것을 볼 수있는 권한이 거부 한 정의

  • 을 볼 수 있습니다.

Metadata Visibility Configuration에 대한 MSDN 페이지에서 확인할 수 있습니다.

이제이 설정에 영향을주는 다양한 사용 권한 (VIEW DEFINITION, VIEW ANY DEFINITION 등)이 있습니다. 이들은 다양한 수준에서 적용 할 수 있습니다

  • 개체 자체를
  • 스키마
  • 데이터베이스
  • 여러 Windows 그룹의 계정 회원으로 찍을 때

권한은 더 복잡 (사용중인 경우).

권한을 여러 수준에서 부여 할 수도 있습니다. 사용 권한도 추가됩니다. 로그인이 속한 Windows 그룹 3 개 중 1 개에서 GRANT를 사용하면 충분합니다. 그러나 해당 레벨의 DENY가 우선하며,이 경우 정의가 없습니다.

질문에 대한 언급에서 언급했듯이, 이것은 정의를 볼 수없는 권한을 구성한 Production DBA (프로덕션 DBA)의 문제입니다. 왜 GRANT 나 DENY가없는 정의를 볼 수 없는지 정확히 알지 못하면이 권한을 얻으려는 GRANT 문을 발행하는 것은 쓸모가 없습니다 (특히 정의를 볼 수 없기 때문에 마찬가지로 누구에게나 그러한 허가를 부여 할 수 있어야합니다.) 기본 제약 조건의 정의를 볼 수는 없지만 능력을 발휘할 수 있다고 말하면서 Production 담당자에게 이야기하십시오. 당신이 현재 할 수없는 특별한 이유가있는 경우, 당신은 말할 것입니다. 그것이 감독 인 경우 다른 환경에 복제해야하는 제어 된 방식으로 수정해야합니다.

1

dev와 prod 사이의 SSMS에서 개체를 보는 차이는 dev와 prod 사이의 사용자 계정에 대한 사용 권한 차이 때문입니다. OBJECT에 OBJECT 또는 CONTROL에

변경하거나 소유권을 : 기본 값을 볼 개체에 다음과 같은 권한 중 하나 이상을 가질 필요가 테이블 개체에 기본값을보기 위해

OBJECT 또는 OBJECT에 뷰 정의에

은 귀하의 질문에 대답 :

공을 꽤 많은 것 같습니다이 https://dba.stackexchange.com/questions/78769/minimum-sql-server-rights-that-allow-viewing-column-default-values

발견

+0

즉, 'grant view permission on to '을해야합니까? 또한 실제로 dba 스택 교환에 대해 알지 못했습니다. – user2023861

+1

거의 - "보기 권한"이 아닌 "정의보기"권한입니다 (http://technet.microsoft.com/en-us/library/ms175808(v=sql.105).aspx 또는 지정된 다른 권한 참조). - 변경, 제어, 소유권 가져 오기 또는 정의보기 – Kritner

+0

Kritner, 해당 링크 및 이미지를 변경하고자 할 수 있습니다. 이들은 확장 속성을 참조하십시오. 이것은 객체 자체의 정의 문제입니다. –

관련 문제