동의어 이해

동의어란 다음 용도로 사용되는 데이터베이스 개체입니다.

  • 로컬 서버나 원격 서버에 있을 수 있는 기본 개체로 참조되는 다른 데이터베이스 개체의 대체 이름을 제공합니다.

  • 기본 개체의 이름이나 위치의 변경으로부터 클라이언트 응용 프로그램을 보호하는 추상적 계층을 제공합니다.

예를 들어 Server1이라는 서버에 있는 AdventureWorks2008R2 예제 데이터베이스의 Employee 테이블을 검토해 보십시오. 다른 서버 Server2에서 이 테이블을 참조하려면 클라이언트 응용 프로그램이 네 부분으로 된 이름 Server1.AdventureWorks.HumanResources.Employee를 사용해야 합니다. 또한 테이블 위치를 다른 서버 등으로 변경하는 경우 이 변경 내용을 반영하기 위해 클라이언트 응용 프로그램을 수정해야 합니다.

Server1의 Employee 테이블에 대한 동의어, EmpTable을 Server2에 만들어 이러한 문제를 해결할 수 있습니다. 이제 클라이언트 응용 프로그램은 단일 부분으로 된 이름인 EmpTable만 사용하여 Employee 테이블을 참조해야 합니다. 또한 Employee 테이블 위치가 변경되면 동의어 EmpTable를 수정하여 Employee 테이블의 새 위치를 가리키게 해야 합니다. ALTER SYNONYM 문이 없으므로 먼저 동의어 EmpTable을 삭제한 다음 같은 이름으로 동의어를 다시 만들지만Employee의 새 위치를 가리키게 해야 합니다.

동의어는 스키마에 속하고 스키마의 다른 개체처럼 동의어 이름은 고유해야 합니다. 다음 데이터베이스 개체의 동의어를 만들 수 있습니다.

어셈블리(CLR) 저장 프로시저

어셈블리(CLR) 테이블 반환 함수

어셈블리(CLR) 스칼라 함수

어셈블리(CLR) 집계 함수

복제 필터 프로시저

확장 저장 프로시저

SQL 스칼라 함수

SQL 테이블 반환 함수

SQL 인라인 테이블 반환 함수

SQL 저장 프로시저

테이블1(사용자 정의)

1에는 개인 및 전역 임시 테이블이 포함됩니다.

[!참고]

함수 기본 개체의 네 부분으로 된 이름은 지원되지 않습니다.

동의어는 다른 동의어의 기본 개체가 될 수 없고 사용자 정의 집계 함수를 참조할 수 없습니다.

동의어와 해당 기본 개체는 이름별로만 바인딩됩니다. 기본 개체에 대한 모든 존재, 유형 및 권한 검사는 런타임까지 지연됩니다. 따라서 기본 개체를 수정, 삭제 또는 삭제 후 원래 기본 개체와 같은 이름을 가진 다른 개체로 바꿀 수 있습니다. 예를 들어 Adventure Works의 Person.Person 테이블을 참조하는 동의어 MyContacts를 고려해 보십시오. Person 테이블을 삭제한 후 Person.Person이라는 뷰로 바꾸면 MyContacts는 Person.Person 뷰를 참조합니다.

동의어에 대한 참조는 스키마에 바인딩되지 않습니다. 따라서 동의어는 언제라도 삭제할 수 있습니다. 그러나 동의어를 삭제하면 삭제된 동의어에 대한 참조가 현수 참조로 남게 될 위험이 있습니다. 이러한 참조는 런타임에만 발견됩니다.

동의어 및 스키마

소유하지 않은 기본 스키마가 있는데 동의어를 만들려면 소유한 스키마 이름을 사용하여 동의어 이름을 적합하게 지정해야 합니다. 예를 들어 x 스키마를 소유하지만 y 스키마가 기본 스키마이고 CREATE SYNONYM 문을 사용할 경우에는 단일 부분으로 된 이름을 사용하여 동의어 이름을 지정하는 대신 x 스키마를 동의어 이름 접두사로 지정해야 합니다. 동의어를 만드는 방법은 CREATE SYNONYM(Transact-SQL)을 참조하십시오.

동의어에 대한 권한 부여

db_owner의 멤버나 db_ddladmin의 멤버인 동의어 소유자만 동의어에 대한 권한을 부여 받을 수 있습니다.

동의어에 대한 다음과 같은 모든 권한에 대해 GRANT, DENY 및 REVOKE를 수행할 수 있습니다.

CONTROL

DELETE

EXECUTE

INSERT

SELECT

TAKE OWNERSHIP

UPDATE

VIEW DEFINITION