Wikipedia says that “Synonyms are different words with identical or very similar meanings like student and pupil is synonym, buy and purchase is synonym.”
And concept of “Synonym” in SQL Server is not different at all, as SQL Server synonym is alternate name of a database object. For example, you can define an alternate name usp_Get_Invoices for a stored procedure Sales.dbo.usp_Get_Current_Month_Invoices.
Few things we should know about synonums are following:
1. Synonym can be used to refer an object in current server or remote server.2. Synonym can be created for following types of objects:a. Tables: User-defined that include local and global temporary tables alsob. Stored Procedures: SQL, CLR and extended, all types of stored proceduresc. Functions: SQL and CLR both types of functionsd. Views3. A synonym can not be the base object for another synonym.4. Dropping a synonym does not affect the base object.5. Synonyms are not schema bound to base object and remain deferred until run-time. In other words the base object’s existence, validity, and permissions are checked only at run time.6. Syntax to create a synonym is following:CREATE SYNONYM [schema_Name.]Synonym_Name FOR base_Object7. Syntax to drop a synonym is following:DROP SYNONYM [schema_Name.]Synonym_Name8. Synonym can be used in DML statements. Let us test with following code:CREATE TABLE dbo.tblTest (Col1 INT, Col2 INT)GOINSERT INTO dbo.tblTest VALUES(1,10)GOCREATE SYNONYM syn_Table FOR dbo.tblTestGOSELECT * FROM syn_Table -- retunrs 1 recordGOINSERT INTO syn_Table VALUES (1,1)SELECT * FROM syn_Table -- returns 2 records
9. Synonym can not be used in DDL statements. If we execute the below statements:
ALTER TABLE syn_Table ADD Col3 INT
Following error occur:Msg 4909, Level 16, State 1, Line 1Cannot alter 'syn_Table' because it is not a table.
8. Synonyms are like view in permission checking and ownership chaining. For example if an user TestUser does not have execute permission on a stored procedure dbo.proc_TestSynonym, but have execute permission on a synonym of this stored procedure dbo.syn_Proc then user can execute dbo.syn_Proc successfully. Test this using below script:
CREATE PROCEDURE dbo.proc_TestSynonym
ASSELECT * FROM dbo.tblTest --change the table name
GOCREATE LOGIN TestUser WITH PASSWORD = 'TestUser', CHECK_POLICY = OFF
GOUSE Test --DB nameGOCREATE USER TestUser
GODENY EXECUTE ON dbo.proc_TestSynonym TO TestUser
GO CREATE SYNONYM dbo.syn_Proc FOR dbo.proc_TestSynonym
GO GRANT EXECUTE ON dbo.syn_Proc TO TestUser
GO EXEC AS USER = 'TestUser'
GO PRINT '1'
EXEC dbo.proc_TestSynonym --fail with permission denied error
GO PRINT '2'
EXEC dbo.syn_Proc --successfully executes GO REVERT
GO DROP SYNONYM dbo.syn_ProcGODROP PROCEDURE dbo.proc_TestSynonym
GODROP USER TestUser
GODROP LOGIN TestUser
No comments:
Post a Comment