First published on MSDN on Sep 24, 2010
Andreas Wolter recently posted yet another reason to
keep guest disabled on user databases
in SQL Server. He also points out some reasons why developers shouldn’t have access to production systems, but I’d like to focus on the implications for guest. As Andreas summarizes at the end of his post,
“never use the guest account for data that is not really supposed for everyone
Absolutely agree! Guest is disabled by default in all user databases and should remain so – guest really does mean everyone. There is no way to keep someone that has access to SQL Server from leveraging an enabled guest account – that is how guest is designed to work. No planned changes will alter this guidance. If you need broad access to a database but with some exceptions, it is preferable to use Windows group accounts with broad membership to provide that access and then deny as needed. For SQL authenticated users, explicitly provision the individual logins which need access.
I should also point out that guest is needed for the proper functioning of some of our
databases – such as tempdb. But here the situation is that
on the SQL Server instance really does need access to this database for temporary objects. See Buck Woody’s post
Don’t mess with the system databases in SQL Server, or Error: 916
for more information.