2011-10-18 2 views
7

MSDN에 따르면 간단한 선택으로 구성된보기가 자동으로 테이블에 삽입/업데이트/삭제 문을 사용할 수 있습니다. 이 문제를 방지 할 수있는 방법이 있습니까? SQL Server에보기가 읽기 전용이며 테이블을 수정하는 데 사용할 수 없다는 것을 Sql Server에 알리는 방법이 있습니까?SQL Server에서 읽기 전용보기 만들기

답변

12

가장 좋은 방법은보기에서 UPDATE/DELETE/INSERT 권한을 제거하는 것입니다.

이외에도 업데이트를 자동으로하지 못하도록하는 아무것도 수행하지 않는 INSTEAD OF 트리거를 만들거나 quite a few constructs that make views non updatable이있을 수 있습니다. 따라서 의미 또는 효율성을 변경하지 않고이를 위반할 수 있습니다.

편집 : 다음은 청구서에 맞는 것 같습니다.

CREATE VIEW Bar 
AS 
SELECT TOP 100 PERCENT x 
FROM foo 
WITH CHECK OPTION 
+0

+1 권한은 코드가 아닙니다. 하지만 만약 사람들이보기를 통해 글을 쓸 수 있다면베이스 테이블에 대한 사용 권한이 너무 의심 스럽습니다. – gbn

+0

감사합니다, 매력과 같이 작동합니다. 이러한보기는 실제로 사용자가 액세스 할 수없는 다른 데이터베이스를 참조합니다. 사용자가 읽기 전용으로 만들어서 사용자가 액세스 권한이있는 데이터베이스의보기를 통해 액세스 할 수없는 데이터베이스를 수정할 수 없도록하려고합니다. 개체 별 권한 대신 데이터베이스 별 권한을 사용하여 작업을 단순하게 유지하고 권한 정의에서 위반 사항을 놓치지 않도록하십시오. –

+3

끝에 코드를 추가하여 위험을 지적하겠습니다. 그것은 'WITH CHECK OPTION'에 달려있는 것 같습니다. SQL Server Management Studio로보기를 늦게 편집하면 'WITH CHECK OPTION'이 나타나지 않으며보기가 다시 읽고 쓸 수 있습니다. – BIBD

7

당신은 /를 INSERT/UPDATE 동안 실패 SQL 서버 만들기 위해에 UNION 연산자를 지정할과 같이 작업을 삭제할 수 :

create view SampleView 
as 
    select ID, value from table 
    union all 
    select 0, '0' where 1=0 

마지막 쿼리가 행을 반환하지 않습니다 하지만 UNION을 안전하게 사용하려면 첫 번째 쿼리와 동일한 데이터 유형의 필드가 같아야합니다. 자세한 정보는 다음 링크를 참조하십시오. Different ways to make a table read only in a SQL Server database

+0

"UNION SELECT TOP 0 * FROM 테이블"(적어도 SQL Server 2014에서는)을 추가 할 수도 있습니다. – Christoph

관련 문제