Salesforce数据安全简介
数据安全级别
Salesforce中将数据安全分为若干等级:
- 组织级别:组织级别的安全设定在整个系统内部都有效。这是最广泛的级别
- 对象级别:对象级别的安全设定可以限制用户对于对象的权限
- 字段级别:字段级别的安全设定可以限制用户对于字段的权限
- 记录级别:记录级别的安全设定可以限制用户对于记录的权限,这是最详细的级别
数据安全级别的关系
- 对象级别和字段级别是相关联的,当用户对某字段有权限,那么对该字段所属的对象也是有权限的
- 记录级别独立于对象级别和字段级别,是用户对于某条记录的权限的单独设定。但是当此用户在对象或字段的权限中有“查看全部”和“修改全部”权限时,记录级别会被忽略,即用户可以看或修改任何记录
权限计算
当用户需要进入某条记录、运行报表、进行搜索等操作时,Salesforce会检查该用户的权限。由于Salesforce中有着复杂的权限设定,Salesforce会在权限设定更改时立即计算数据记录的权限,然后将结果保存起来。这样,当用户需要对记录进行操作时,Salesforce不用在此时进行权限的计算(因为会使效率变慢),而是根据储存好的权限结果直接进行判断。
尽量避免引发复杂的权限计算
Salesforce 中关于记录的共享计算很复杂,包括了用户角色等级的设定、公共组设定等。
由于Salesforce会在权限设定更改时立即计算数据记录的权限,看似简单的改变可能引起大量的系统后台操作。
比如在改变一个用户的角色等级的时候,Salesforce 会重新计算每条相关记录的共享设定,包括:
- 该用户所拥有的、共享给别的用户的记录在角色改变以后仍然有效或者不再有效
- 角色等级在该用户上级的用户对于每条记录的权限要重新计算
- 所有涉及到原角色和新角色的共享规则都要重新计算,以此来将该用户拥有的记录移除和添加到相应共享规则的计算结果
对于管理员来说,他所做的只是简单的改变了一个用户的角色。而这个看似简单的改变引发了大量的后台操作,大大降低了系统的运行效率。
与此同时,在权限计算进行中,相关的记录会被锁定。其他用户尝试修改这条记录时会出错。
数据库中的权限相关表格
在数据库中,Salesforce主要使用三类数据表来管理各种权限设定:
- 对象记录表(Object Record Table):这类表中存储着数据记录
- 对象共享表(Object Sharing Table):这类表中存储着各个对象的共享权限,共享权限包括了各种权限设定,包括手动共享、角色权限、共享规则等
- 用户组表(Group Maintenance Table):这类表中保存着各个用户和用户组的关系
当需要决定某个用户或用户组对于某条记录的权限时,会执行以下步骤:
- 在对象记录表中找到这条记录
- 在对象共享表中根据这条记录的ID找到存储于其中的共享权限
- 在用户组表中根据用户或组的ID找到对应的记录,然后在对象共享表中找到和该用户或组的ID相对应的共享权限
以上步骤执行完毕后,Salesforce便得到了该用户或用户组对于这条记录的权限。
组织级别的安全设定举例
组织级别的安全设定在整个系统内部都有效。最常用的设定有用户管理、密码规则、登陆IP限制等。
用户管理
用户管理是典型的组织级别的设定。管理员可以方便的从设置界面对用户进行管理。
需要注意的一点是:一个用户账户只能被冻结(无法登陆),而不能被直接删除。
密码规则设定
管理员可以设定所有用户都必须遵守的密码规则。
在设置界面下搜索“密码策略”,点击“安全性控制”菜单下的“密码策略”链接,可以进入“密码策略”的设定界面。
在此界面中,管理员可以设定用户密码的有效期、密码最小长度、密码复杂性等规则。
使所有密码到期
管理员可以一次性使所有密码到期。
在设置界面下搜索“使所有密码到期”,点击“安全性控制”菜单下的“使所有密码到期”链接,可以进入“使所有密码到期”的设定界面。
在此界面中,管理员可以勾选“使所有用户密码到期”,点击“保存”按钮,从而使所有用户的密码都到期,当用户下次登录时,必须重新设置密码。
受信IP范围
管理员可以设定一个IP范围,只有IP地址属于这个范围内的设备可以登录。
在设置界面下搜索“网络访问”,点击“安全性控制”菜单下的“网络访问”链接,可以进入“网络访问”的设定界面。
在此界面中,管理员需要输入开始和结束的IP地址,并保存。
登录时间和IP限制
Salesforce的用户都属于某一个用户简档。用户简档包含了一系列的规则,规定了用户在整个系统各个方面的权限。其中一种权限就是登录的时间和IP。
在设置界面下搜索“简档”,点击“管理用户”菜单下的“简档”链接,进入“简档”一览表界面。
点击任一简档的名字,进入其详细信息界面。
在简档详细信息的页面最下方,可以找到“登录时间”和“登录 IP 范围”的部分。管理员可以在此处进行设置,规定属于该简档的用户可以登录的时间范围和IP范围。在范围之外的时间或IP的用户无法登录。
如果用户在已经登录的状态下进行工作,当超过了登录时间范围的时候,用户会被自动登出,未保存的工作将丢失。
用户简档
用户简档(Profile)是一组规则的集合,规定了用户对于整个系统各个方面的权限,也包括对象。
利用用户简档,管理员可以设定属于该简档的用户对于若干对象的权限,比如查看、创建、编辑、删除等。这里同样也适用于每个对象的每个字段。
对象的特殊权限
在用户简档中,管理员还可以对对象设定两个特殊权限:“查看全部”和“修改全部”。这两个权限可以使具有此简档的用户忽略其他任何对此对象的安全设定,永远具有对此对象所有记录的查看权限和修改权限。
权限组
除了用户简档,管理员还可以设置权限组。权限组的内容和用户简档类似,也是一组用户对于系统各个方面权限的规则集合。
用户简档和权限组的功能有重叠的部分,一般来说,每个用户都必须具有一个用户简档,权限组可以作为用户简档的补充手段。
用户简档里的规则是统一的。当属于某用户简档的一部分用户需要一些特殊权限的时候,可以将这些特殊权限设定在某权限组中,再将该部分用户加入权限组里,这样,他们就可以在不失去用户简档规定的权限的同时拥有了权限组中规定的权限。
共享设置
在设置界面下搜索“共享设置”,点击“安全性控制”菜单中的“共享设置”链接,即可进入“共享设置”界面。
“共享设置”界面显示了系统中对于每个对象的权限设置。“共享设置”界面分为两部分:“默认共享设置”和“共享规则”。
“共享设置”处于数据安全级别的最底层,如果在用户简档或其他地方对于某些对象有其他的权限设定,则此处的访问权限设定将会被忽略。
默认共享设置
默认共享设置影响的范围是整个组织,在此可以规定每个对象对于所有用户的访问权限。
共享规则
共享规则是基于每个对象的。一条共享规则包括:
- 基本属性:标签、名字、描述等
- 规则类型:可以设定是基于记录的所有人还是基于某些条件
- 被共享的用户:可以设定此共享规则对哪些用户有效。此处的用户分为三种:公用小组、角色、角色及下属
- 被共享用户的访问权限:可以设定被共享的用户对于此数据有哪些权限
手动共享记录
无论是用户简档、权限组、共享设置,都只能设定对象、字段共享的规则。如果用户想共享某一条记录,那么就需要手动设置该记录的共享权限。
在记录的详细页面上,单击“共享”按钮,即可设定共享规则。
当一个对象在“共享设置”的“默认共享设置”中被设为“公用读/写”权限时,此对象的记录默认被所有用户共享,则此对象的记录中没有“共享”按钮。
隐式共享
Salesforce中的隐式共享是自动发生的,无法被关闭或消除。隐式共享对自定义对象不起作用。
父关系隐式共享
当某用户对某条Account记录的子记录(机会 Opportunity、联系人 Contact、个案 Case)拥有权限时,该用户自动对该Account记录拥有权限。
子关系隐式共享
当某用户是某条Account记录的所有者(Owner)时,该用户自动对此Account的各个子记录(机会 Opportunity、联系人 Contact、个案 Case)拥有权限。
记录权限设定小结
- 简档和权限集(Profiles and Permission Sets)。这是在对象层级设置的权限,可以设置对于每个对象的权限。特殊的选项是“读取所有”(View all)和“修改所有”(Modify all),它们的优先级高过其余的分享规则等设定。权限集一般是作为简档的补充。
- 记录所有者和队列(Record Ownership and Queues)。每条记录都要有所有者,而所有者对于记录的权限取决于所有者用户所属的简档和权限集。队列是一种特殊的用户组。
- 组织范围默认设定(Organization-Wide Defaults)。它是唯一的可以限制用户对于记录的读写权限的方法,其他的记录权限架构设定都是给出对于记录的读写权限。
- 角色层级(Role Hierarchy)。角色层级定义了用户的上下级关系。如果某个用户对一条记录有某种读写权限,那么角色处于这个用户上层的所有用户默认对这条记录拥有相同的权限。角色层级是记录权限架构的基础,所以必须小心地设计。一个简单的用户角色改动会引起大量的记录权限计算。
- 公共组(Public Groups)。公共组可以包含用户、角色、区域等,也可以包含其他公共组。
- 基于记录所有者的分享规则(Ownership-based Sharing Rules)。这是特殊的记录分享规则,可以将读写权限授予非记录所有者。
- 基于条件的分享规则(Criteria-based Sharing Rules)。和上一条类似,但是分享条件是基于某些字段的值。分享规则可以提供除了简档、角色层级等方法之外的额外的权限分享。
- 手动分享(Manual Sharing)。记录所有者可以手动设置某条记录的分享。当记录所有者变更,或者记录的分享设定比组织范围默认设定宽松的时候,手动分享的设定会被移除。
- 小组(Teams)。这是一种特殊的设定,适用于客户(Account)、机会(Opportunity)和案例(Case)对象。记录所有者可以建立一个小组,包含若干用户,这些用户就形成了针对这条记录的小组。
- 区域层级(Territory Hierarchy)。这是将记录按照“区域”,也就是不同的业务单元来划分。它只适用于客户(Account)、机会(Opportunity)和属于它们的“主-详细”(Master-Detail)关系的记录。
- 隐式分享(Implicit Sharing)。自动建立的分享规则。对于父、子记录的隐式分享,只对客户(Account)和其子对象(机会、联系人、案例)有效。