本文介绍如何管理文件访问权限。

读写权限类型

Object包含以下4种读写权限:

说明 Object的访问权限优先级高于Bucket的访问权限。例如,Bucket的访问权限为私有,而Object的访问权限是公共读,则任何人(包括匿名用户)都可以对该Object进行读操作。
权限类型 描述 权限值
继承Bucket(默认权限) 当Object未设置访问权限时,该Object遵循Bucket的读写权限,即Bucket是什么权限,Object就是什么权限。 CannedAccessControlList.Default
私有 只有Object的拥有者可以对该Object进行读写操作,其他人无法访问该Object。 CannedAccessControlList.Private
公共读 只有该Object的拥有者可以对该Object进行写操作,任何人(包括匿名访问者)都可以对该Object进行读操作。
警告 互联网上任何用户都可以对该Object进行访问,这有可能造成您数据的外泄以及费用激增,请谨慎操作。
CannedAccessControlList.PublicRead
公共读写 任何人(包括匿名访问者)都可以对该Object进行读写操作。
警告 互联网上任何用户都可以对该Object进行访问,并且向该Object写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可能会侵害您的合法权益。除特殊场景外,不建议您配置公共读写权限。
CannedAccessControlList.PublicReadWrite

示例代码

以下代码用于设置并获取指定Object的访问权限:

using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
var accessKeyId = "yourAccessKeyId";
var accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
var bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
var objectName = "exampleobject.txt";

// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
// 设置文件权限。
try
{
    // 通过SetObjectAcl设置文件权限。
    client.SetObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
    Console.WriteLine("Set Object:{0} ACL succeeded ", objectName);
}
catch (Exception ex)
{
    Console.WriteLine("Set Object ACL failed with error info: {0}", ex.Message);
}
// 获取文件权限。
try
{
    // 通过GetObjectAcl获取文件权限。
    var result = client.GetObjectAcl(bucketName, objectName);
    Console.WriteLine("Get Object ACL succeeded, Id: {0}  ACL: {1}",
        result.Owner.Id, result.ACL.ToString());
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2}\tHostID: {3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

相关文档

  • 关于Object访问权限的完整示例代码,请参见GitHub示例
  • 关于设置Object访问权限的API接口说明,请参见PutObjectACL
  • 关于获取Object访问权限的API接口说明,请参见GetObjectACL