1. Objects are contained in groups that make sense – i.e. HR, Shipping, etc. which makes it easier to differentiate roles.
2. Permissions can be given on schemas and users added to those schemas, simplifying permissions.
3. Allows for multiple revisions of an object for example a possible change to an existing object using live data in a different schema for testing.
1. Poorly coded queries and applications may error if they don’t reference the schema.object name.
2. Schema sprawl – making schemas and objects too granular ending up with 500 different schemas for no reason.
3. Schema upkeep, including diagnosing why users are having issues with certain queries or permissions.
4. Permissions chaining trouble depending on design.
Also Refer an interesting article: http://blogs.msdn.com/lcris/archive/2007/09/13/basic-sql-server-security-concepts-ownership-chaining-good-and-evil-schemas.aspx
– Ananth Ramasamy Meenachi www.msarm.com