열의 모든 사용자가 업데이트를 허용하지 않을 수 있습니까? 다음 표 생각해 내 시스템의 무결성을 유지하기 위해SQL Server 2012의 모든 환경에서 모든 사용자에 대해 열의 업데이트를 허용하지 않음
Create table [MyTable]
(
[Id] int not null identity primary key,
[Description] varchar(30) not null,
[Length] int not null
)
을, 나는 [Length]
열이 레코드를 삽입 한 후 변경 할 수 없습니다 필요가있다.
트리거를 사용하여 :
create trigger [Trigger_MyTable] on [MyTable] for update as begin if UPDATE([Length]) begin RAISERROR('Change not allowed.', 16, 1) Rollback Transaction end end
이
DENY UPDATE
를 사용하여 :DENY UPDATE ON [MyTable]([Length]) TO [User1]
내가 '이유는 여기에
내가 탐험 몇 가지 옵션이 있습니다 우리에게 멸시당한 트리거는 과거에 트리거가있는 테이블로 작업 할 때 업데이트 구문을 수행 할 때 상당한 성능 저하를 경험했습니다. 편리에 의해DENY UPDATE
기능 것 (예. 빨리, 테스트하지 않았습니다 수 있습니다. < 일초 트리거를 삭제 한 후, 테이블에 20,000 행이 instead of update
트리거 4-5 분이 소요 For update
을 업데이트)하지만이 할 수있는 방법이있다 모든 사용자 (관리자/소유자 사용자 포함)에게 적용됩니까?
감사합니다.
ID 열의 값은 업데이트 할 수 있습니다. SET IDENTITY_INSERT ON | OFF'를 참조하십시오. 트리거가 가장 좋은 방법 인 것처럼 보이지만 소유자와 관리자는 여전히 해당 트리거를 삭제하거나 사용 중지 할 수 있습니다. –
@PhilipKelley 아니요,'identity_insert'는 당신이 그들을 삽입 할 수있게 해주고, 업데이트하지는 않습니다. 적절한 권한을 가진 사람이 [이 접근법] (http://stackoverflow.com/questions/751522/how-to-change-identity-column-values-programmatically/17249583#17249583)을 사용할 수 있지만 단순히 삭제하고 삽입하는 것이 더 쉬울 것입니다. –