diff --git a/local_db_manual_scaffolding.ps1 b/local_db_manual_scaffolding.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..b11b4a788765c04969d14bf3d6cd0518dfe2d9c1
--- /dev/null
+++ b/local_db_manual_scaffolding.ps1
@@ -0,0 +1,15 @@
+$DB_DATA_SOURCE = consul kv get "coscine/global/db_data_source"
+$DB_USER_ID = consul kv get "coscine/global/db_user_id"
+$DB_PASSWORD = consul kv get "coscine/global/db_password"
+$DB_NAME = consul kv get "coscine/global/db_name"
+
+dotnet new tool-manifest --force
+dotnet tool install dotnet-ef
+dotnet tool update dotnet-ef
+
+dotnet ef dbcontext scaffold "Data Source=$DB_DATA_SOURCE;Integrated Security=False;User ID=$DB_USER_ID;Password=$DB_PASSWORD;Database=$DB_NAME" Microsoft.EntityFrameworkCore.SqlServer -o DataModel -c "Model" -f --no-onconfiguring --project "src\Scaffolding"
+
+# Remove the hardcoded Connection String inside \DataModel\Model.cs
+Set-Content -Path ".\src\Scaffolding\DataModel\Model.txt" -Value (Get-Content -Path ".\src\Scaffolding\DataModel\Model.cs" | where { $_ | Select-String -Pattern '#warning' -NotMatch } | where { $_ | Select-String -Pattern 'Data Source=' -NotMatch } ) -Force
+Set-Content -Path ".\src\Scaffolding\DataModel\Model.cs" -Value (Get-Content -Path ".\src\Scaffolding\DataModel\Model.txt") -Force
+Remove-Item ".\src\Scaffolding\DataModel\Model.txt"
diff --git a/src/Database/Models/RDSResourceTypeModel.cs b/src/Database/Models/RDSResourceTypeModel.cs
index 5b2eeff6705204c554afb8b9921e798a59ff93a8..7a08f070307d392c0ee883eb409bbc5183e9946c 100644
--- a/src/Database/Models/RDSResourceTypeModel.cs
+++ b/src/Database/Models/RDSResourceTypeModel.cs
@@ -27,8 +27,11 @@ namespace Coscine.Database.Models
         {
             var dictionary = new Dictionary<string, string>();
             var resourceType = GetById(id);
+            dictionary.Add("accessKey", resourceType.AccessKey);
+            dictionary.Add("secretKey", resourceType.SecretKey);
             dictionary.Add("bucketname", resourceType.BucketName);
-            dictionary.Add("size", $"{resourceType.Size}");
+            dictionary.Add("endpoint", resourceType.Endpoint);
+            dictionary.Add("size", $"{resourceType.Size}"); 
             return dictionary;
         }
     }
diff --git a/src/Database/Models/ResourceModel.cs b/src/Database/Models/ResourceModel.cs
index b9a2af775447b1542ee810d6120c2080c5ad081b..b589186597a7911492199f8739517d6df012b0ea 100644
--- a/src/Database/Models/ResourceModel.cs
+++ b/src/Database/Models/ResourceModel.cs
@@ -101,7 +101,7 @@ namespace Coscine.Database.Models
                         from jrt in joinedRt.DefaultIfEmpty()
 
                         where jp.Deleted == false &&
-                        jrt.DisplayName == "rds"
+                        IsLikeRds(jrt.DisplayName)
                         group r by jpi.OrganizationUrl into g
                         select new OrganizationResourceListObject(g.Key, g.ToList())).ToList();
             });
@@ -109,7 +109,7 @@ namespace Coscine.Database.Models
 
         private void SetResourceTypeObject(Resource resource, JObject resourceTypeOption)
         {
-            if (resource.Type.DisplayName == "rds")
+            if (IsLikeRds(resource.Type.DisplayName))
             {
                 RDSResourceTypeObject rdsResourceTypeObject = resourceTypeOption.ToObject<RDSResourceTypeObject>();
                 RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel();
@@ -195,7 +195,7 @@ namespace Coscine.Database.Models
                     Update(resource);
                 }
             }
-            else if (resource.Type.DisplayName == "rdss3")
+            else if (IsLikeRdsS3(resource.Type.DisplayName))
             {
                 var rdsS3ResourceTypeObject = resourceTypeOption.ToObject<RdsS3ResourceTypeObject>();
                 var rdsS3ResourceTypeModel = new RdsS3ResourceTypeModel();
@@ -238,7 +238,7 @@ namespace Coscine.Database.Models
             {
                 return new GitlabResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
             }
-            else if (resourceType.DisplayName == "rds")
+            else if (IsLikeRds(resourceType.DisplayName))
             {
                 return new RDSResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
             }
@@ -250,7 +250,7 @@ namespace Coscine.Database.Models
             {
                 return new LinkedResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
             }
-            else if (resourceType.DisplayName == "rdss3")
+            else if (IsLikeRdsS3(resourceType.DisplayName))
             {
                 return new RdsS3ResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
             }
@@ -341,7 +341,7 @@ namespace Coscine.Database.Models
         public void DeleteResourceTypeObject(Resource resource)
         {
             SetType(resource);
-            if (resource.Type.DisplayName == "rds" && resource.ResourceTypeOptionId != null)
+            if (IsLikeRds(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
             {
                 RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel();
                 rdsResourceTypeModel.Delete(rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
@@ -356,7 +356,12 @@ namespace Coscine.Database.Models
                 GitlabResourceTypeModel gitlabResourceTypeModel = new GitlabResourceTypeModel();
                 gitlabResourceTypeModel.Delete(gitlabResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
             }
-            else if (resource.Type.DisplayName == "rdss3" && resource.ResourceTypeOptionId != null)
+            else if (resource.Type.DisplayName == "linked" && resource.ResourceTypeOptionId != null)
+            {
+                LinkedResourceTypeModel linkedResourceTypeModel = new LinkedResourceTypeModel();
+                linkedResourceTypeModel.Delete(linkedResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
+            }
+            else if (IsLikeRdsS3(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
             {
                 var rdsS3ResourceTypeModel = new RdsS3ResourceTypeModel();
                 rdsS3ResourceTypeModel.Delete(rdsS3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
@@ -387,7 +392,7 @@ namespace Coscine.Database.Models
             }
 
             ResourceTypeOptionObject resourceTypeOptionObject = null;
-            if (resource.Type.DisplayName == "rds" && resource.ResourceTypeOptionId != null)
+            if (IsLikeRds(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
             {
                 RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel();
                 var rdsResourceType = rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
@@ -412,7 +417,7 @@ namespace Coscine.Database.Models
                 resourceTypeOptionObject = new LinkedResourceTypeObject(linkedResourceType.Id);
 
             }
-            else if (resource.Type.DisplayName == "rdss3" && resource.ResourceTypeOptionId != null)
+            else if (IsLikeRdsS3(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
             {
                 var rdsS3ResourceTypeModel = new RdsS3ResourceTypeModel();
                 var rdsS3ResourceType = rdsS3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
@@ -444,7 +449,7 @@ namespace Coscine.Database.Models
                 resource.ApplicationProfile,
                 JToken.Parse(resource.FixedValues ?? "{}"),
                 (resource.Creator != null) ? resource.Creator : null,
-                (resource.Archived == "1") ? true : false
+                resource.Archived == "1"
             );
         }
 
@@ -502,7 +507,7 @@ namespace Coscine.Database.Models
                 }
                 else if (property.PropertyType == typeof(IEnumerable<DisciplineObject>)
                     && property.GetValue(resourceObject) != null
-                    && ((IEnumerable<DisciplineObject>)property.GetValue(resourceObject)).Count() > 0)
+                    && ((IEnumerable<DisciplineObject>)property.GetValue(resourceObject)).Any())
                 {
                     counted++;
                 }
@@ -530,5 +535,15 @@ namespace Coscine.Database.Models
 
             return $"{counted}/{maxCount}";
         }
+
+        private bool IsLikeRds(string compare)
+        {
+            return compare == "rds" || compare == "rdsude";
+        }
+
+        private bool IsLikeRdsS3(string compare)
+        {
+            return compare == "rdss3" || compare == "rdss3ude";
+        }
     }
 }
diff --git a/src/Scaffolding/DataModel/Model.cs b/src/Scaffolding/DataModel/Model.cs
index 9de0b64024a38d54a910b4910ba842e03e2865c0..4fc5c3218fbb05f7dff0d9311db5ea96c951ae53 100644
--- a/src/Scaffolding/DataModel/Model.cs
+++ b/src/Scaffolding/DataModel/Model.cs
@@ -551,9 +551,21 @@ namespace Coscine.Database.DataModel
 
                 entity.Property(e => e.Id).HasDefaultValueSql("(newid())");
 
+                entity.Property(e => e.AccessKey)
+                    .IsRequired()
+                    .HasMaxLength(200);
+
                 entity.Property(e => e.BucketName)
                     .IsRequired()
                     .HasMaxLength(63);
+
+                entity.Property(e => e.Endpoint)
+                    .IsRequired()
+                    .HasMaxLength(200);
+
+                entity.Property(e => e.SecretKey)
+                    .IsRequired()
+                    .HasMaxLength(200);
             });
 
             modelBuilder.Entity<Resource>(entity =>
diff --git a/src/Scaffolding/DataModel/RdsresourceType.cs b/src/Scaffolding/DataModel/RdsresourceType.cs
index 88751a2511be2d79e44568ff24ccff70c924cf18..673987713bec53d79a4ad8e13467022dfd043359 100644
--- a/src/Scaffolding/DataModel/RdsresourceType.cs
+++ b/src/Scaffolding/DataModel/RdsresourceType.cs
@@ -12,5 +12,8 @@ namespace Coscine.Database.DataModel
         public Guid Id { get; set; }
         public string BucketName { get; set; }
         public int? Size { get; set; }
+        public string AccessKey { get; set; }
+        public string SecretKey { get; set; }
+        public string Endpoint { get; set; }
     }
 }