研究权限这些东西主要是因为今天正好在折腾数据库备份相关的东西,备份好说,备份完了就完了。
但是恢复备份的时候,需要先让数据库脱机,然后恢复,然后再联机,嗯,问题就出在联机上了。
根据 MSDN 的说法:https://msdn.microsoft.com/zh-cn/library/bb522682.aspx
OFFLINE 只需要拥有本数据库的 ALTER DATABASE 权限,但是 ONLINE 却需要拥有服务器级别的 ALTER ANY DATABASE 权限。
感觉好坑的样子。。。
那么服务器默认的几个角色里面,都谁有 ALTER ANY DATABASE 权限呢,为了看这个权限,又看了好多关系不是太大的东西。。。
服务器级别角色:https://msdn.microsoft.com/zh-cn/library/ms188659.aspx
数据库级别角色:https://msdn.microsoft.com/zh-cn/library/ms189121.aspx
这两个网址里面描述的东西就是咱们平时为登陆用户分配权限时见到的几个默认角色的说明。
有兴趣的话可以看看,其实主要是现在我还对数据库的权限分配要求不是很严谨,凑合能用就行,本来应该严格的为各个不同权限的用户分配角色权限的。
顺便还查了一下架构到底是什么东西,当然还是没有看太懂就是了,所以就先贴两个链接吧:
SQL SERVER 2005/2008 中关于架构的理解(一):http://www.cnblogs.com/chillsrc/p/3383098.html
SQL SERVER 2005/2008 中关于架构的理解(二):http://www.cnblogs.com/chillsrc/p/3389374.html
感觉有点像程序里的命名空间一样,将数据库里的各个对象都放在不同的架构中,这样方便集中的管理和分配权限什么的,也可以顺便解决重名问题?(仅猜测,未验证)
好吧,回到正题,来看看默认的这些角色到底都有啥权限?
对于服务器角色:https://msdn.microsoft.com/zh-cn/library/ms179872.aspx
DECLARE @TEMP TABLE( role NVARCHAR(128), permission NVARCHAR(128) ) INSERT INTO @TEMP EXEC sp_srvrolepermission SELECT * FROM @TEMP WHERE permission = ‘alter database‘
嗯,还顺便学习了下怎么利用存储过程的结果。。。要用临时表存储
查到的结果呢,就这俩可以达到我们的要求。还有一个很遗憾的消息,这个方法将于未来被删除,但还没确定在哪个版本删,也不知道接班方法是谁,很坑。。。
对于数据库角色:https://msdn.microsoft.com/zh-cn/library/ms188423.aspx
这个没啥好看的就不看了。
于是呢,这里为了解决联机的问题,把对应的数据库用户赋予dbcreator角色就好咯。。。折腾这么一大圈。。。
(完)