I am a very critical DBA, when it comes to security and SQL Server is the Far most Secure database i have worked with, but here are some more concepts in SQL Server we can make use of to make the base objects more secure for client apps.
Synonym is an diff or alternative name that is used for a database object. So in turn all the application can use this single part name instead of using the multipart (two, three,four) names for reference a object.
This is also a security benefits in using a synonym for critical database objects, when need not be exposed.
How does this help a client application?
Well if you change the underlying object or structure of the object, you do not have to change the synonym and still use the same synonym name, without worrying about the base object.
The base object can be dropped and replace by the same name object.. like instead of a table you create a view with the same name, the synonym will work.
How to Create a synonym?
FOR Remote Servers (four Part Naming)
CREATE synonym MySynonym for LinkedServer.DatabaseName.SchemaName.TableName
FOR Local Server
Create Synonym MySynonym for DatabaseName.SchemaName.TableName
Select statement for a synonym?
SELECT * FROM MySynonym
How to DROP a synonym?
DROP Synonym SynonymName
So you can say a binding between a Synonym and its base object is by name only.
Synonym can be created on the object types.
Assembly (CLR) stored procedure
Assembly (CLR) table-valued function
Assembly (CLR) scalar function
Assembly (CLR) aggregate functions
Replication-filter-procedure
Extended stored procedure
SQL scalar function
SQL table-valued function
SQL inline-tabled-valued function
SQL stored procedure
View
Table1 (User-defined)
Only synonym owners, members of db_owner, or members of db_ddladmin can grant permission on a synonym.
you cannot reference a synonym that is located on a remote server (linked server)
Synonym can be created only on the following command types:
SELECT
INSERT
UPDATE
DELETE
EXECUTE
Sub-selects
Working on the synonym, affects the base object.
If you insert a Row in the synonym, which in turn inserts a row in the base object.
Read BOL for more info on this as most of the Topic is from BOL.